My ECMAScript 7 wishlist

David Bruant bruant.d at gmail.com
Fri Jun 6 05:44:21 PDT 2014


Le 06/06/2014 01:08, Rick Waldron a écrit :
> On Thu, Jun 5, 2014 at 6:42 PM, Nicholas C. Zakas 
> <standards at nczconsulting.com <mailto:standards at nczconsulting.com>> wrote:
>
>     * `Object.deepPreventExtensions()`, `Object.deepSeal()`,
>     `Object.deepFreeze()` - deep versions of
>     `Object.preventExtensions()`, et al.
>
>
> Does "deep" mean that a Map instance's [[MapData]] is frozen if 
> deepFreeze is called on a ? eg. what happens here:
>
> var m = Object.deepFreeze(new Map());
> m.set(1, 1);
I think the intention behind Object.freeze was to make objects immutable 
(at a shallow level), so maybe the semantics of Map.prototype.set (and 
all modifying operations, of Map&co) should be changed to read the 
[[IsExtensible]] and throw if false is returned. Given Maps are already 
in the wild, this decision might need to be taken quickly.

or should an Object.makeImmutable be introduced? (it would be freeze + 
make all internal [[*Data]] objects immutable)

>     * `Object.preventUndeclaredGet()` - change an object's behavior to
>     throw an error if you try to read from a property that doesn't
>     exist (instead of returning `undefine`).
>
(I already know that Nicholas and I disagree on the topic, but sharing 
for debating).

> This can be achieved with Proxy right, or is that too cumbersome?
Code-readability-wise, wrapping in a proxy is as cumbersome as a call to 
Object.preventUndeclaredGet I guess.

This sort of concerns are only development-time concerns and I believe 
the runtime shouldn't be bothered with these (I'm aware it already is in 
various web). For instance, the TypeScript compiler is capable today of 
catching this error. Given that we have free, cross-platform and fairly 
easy to use tools, do we need assistance from the runtime?

David

[1] https://twitter.com/passy/status/469127322072014849
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140606/baecb36e/attachment.html>


More information about the es-discuss mailing list