Frozen Date objects?
nathan.wall at live.com
Fri Jul 19 08:01:25 PDT 2013
Erik Arvidsson wrote:
> This can either be done by exposing an object that has the same
> interface as Date. This could throw on set or it could skip the set
> methods entirely. If you want instanceof to work then all the methods
> needs to be overridden.
Overriding the methods on a real date object (or one that inherits from Date but was constructed with the Date constructor) won't work because then Date.prototype.set* methods would still be able to mutate the internal date by calling them explicitly:
var readOnlyDate = getReadOnlyDate();
readOnlyDate.setHours !== Date.prototype.setHours; // => true
Date.prototype.setHours.call(readOnlyDate, 2); // oops
Also, I don't think `insanceof` should be used to check Dates. If Object.prototype.toString is used, the object just needs to be tagged as a "Date" and the function used to determine whether an object is a date needs to take into consideration "~Date" as well.
More information about the es-discuss