Le 07/09/2011 17:35, Mark S. Miller a écrit :
On Wed, Sep 7, 2011 at 6:40 AM, David Bruant <[email protected] <mailto:[email protected]>> wrote:


    How about we adapt ideas from the "<|" proposal?
    This proposal is only about initializing the prototype. I don't
    see what can be adapted to work on [[Class]].


Agreed that it's quite different. My think was a bit muddy.

The [[Class]] magic that <| does derives from having a literal expression on the right side, determining the [[Class]] of the result while not determining the [[Prototype]] of the result. The cool thing about depending on a literal in this position is we get to delegate to the literal initialization logic the issue of initializing the instance so it has the right own invariants. The proposal works because none of the invariants associated with any existing [[Class]] rely on the instance's [[Prototype]]. The cost if relying on syntax in this way is we can't leverage this to create and initialize, say, a true Date which inherits from something other than Date.prototype. We could if we introduced a Date literal, but that's a terrible way out of the dilemma.

The Date example also points out what's wrong about just inheriting the [[Class]] and its associated internal vtable. Things which check for the Date [[Class]] assume the Date invariants are maintained. A proxy emulation of a Date must uphold these invariants.

Which suggests a bizarre idea. What if the optional third argument were the object to serve the role of Tom's fixedProps object? Then the proxy's [[Class]] would be the fixedProp's [[Class]], and Tom's enforcement mechanism would magically enforce whatever invariants are associated with [[Class]]. This should work for NodeLists and other host objects as well.
So the third argument would be the object the proxy would become. This sounds like a reasonable idea but is a bit different from the original fix proposal which created a fresh object based on an object description (pdmap). I guess I should ask: why in the original design did the author had to return a description of the object to be returned rather than creating the object himself and return it? To avoid returning a proxy, maybe?

David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to