Le 11/09/2013 16:22, Tom Van Cutsem a écrit :
2013/9/11 David Bruant <[email protected] <mailto:[email protected]>>
I think it was discussed at some point to get rid of the
restriction on the getPrototypeOf trap and enforce it only for
non-extensible objects (but I can't find the info anymore, I might
just be inventing this...). It would allow you to return a
different object assuming the target is and remains extensible
(more on that below).
No, I think you're confusing with an invariant on [[SetInheritance]].
Basically [[SetInheritance]] has no invariants as long as the object
is extensible. If it is non-extensible, then proxies enforce that the
prototype of proxy and target are the same, see
<https://people.mozilla.org/~jorendorff/es6-draft.html#sec-9.3.2
<https://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-9.3.2>>.
oh ok.
[[GetInheritance]] always checks whether the proxy and target's
prototype are the same, but as you pointed out, if the target is
extensible, you can set its prototype to some other object before
returning a value from the getPrototypeOf trap.
It's annoying to cleanup post-trap though (to restore the target initial
prototype). Is the invariant on getPrototypeOf that important on
extensible objects?
I think it is the only trap that enforces something without a related
eternal invariant.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss