Implementing membranes using proxies, and [[GetInheritance]]

David Bruant bruant.d at
Wed Sep 11 08:02:04 PDT 2013

Le 11/09/2013 16:22, Tom Van Cutsem a écrit :
> 2013/9/11 David Bruant <bruant.d at <mailto:bruant.d at>>
>     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 
> < 
> <>>.
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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list