Le 06/06/2014 01:08, Rick Waldron a écrit :
On Thu, Jun 5, 2014 at 6:42 PM, Nicholas C. Zakas <standa...@nczconsulting.com <mailto:standa...@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
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to