On Thu, Oct 4, 2012 at 8:40 AM, David Bruant <[email protected]> wrote:

> * It allows the target to be modified first, in anticipation of the target
>> being queried at the end of the trap.
>>
> Do we really need to change the target prototype before reporting a
> different prototype?
> IIRC for performance reasons, it's been decided to not perform any
> inheritance-related invariant check, so which object is in the prototype or
> reported as such does not really matter since it provides no guarantee for
> set/get/has traps. For these traps, any lie can be told for not-own
> properties. In that context, being forced to return a given prototype is a
> bit too much in my opinion since it's not an information client code can
> really rely on for anything
> Things are a bit different for non-extensible objects from which we can
> have stronger expectations (since setting __proto__ doesn't work for them)
>

That last is really the point. It enforces that a proxy cannot appear to
change its __proto__ unless it really can change the __proto__ of its
target. Besides non-extensibility, another reason it may not be able to is
that the relevant Object.prototype.__proto__ was deleted and the proxy's
handler has no access to its original value.


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

Reply via email to