Feedback on the [[HasProperty]] refactoring

David Bruant bruant.d at gmail.com
Mon Sep 17 07:41:24 PDT 2012


I forgot to add that since the has trap is a proto-climbing, it may be 
worth adding receiver as last trap argument, like get and set. 
Otherwise, when the has trap is called with the proxy as prototype of 
another object, the trap is missing some context if it doesn't have the 
receiver.

Le 17/09/2012 16:38, David Bruant a écrit :
> Hi,
>
> I'm talking about 
> http://wiki.ecmascript.org/doku.php?id=harmony:proto_climbing_refactoring#refactoring_hasproperty
>
> The 2 first steps of the proposed algorithms are:
> 1. Let prop be the result of calling the [[GetOwnProperty]] internal 
> method of O with property name P.
> 2. If prop is not undefined, return true.
>
> If O is a proxy, it means that the getOwnPropertyDescriptor trap is 
> being called. This sounds a bit silly considering handlers have an 
> "hasOwn" trap which is what could be expected to be called.
>
> It would turn the [[HasProperty]] algorithm to the more elegant:
> 1. Let hasOwn be the result of calling the [[HasOwnProperty]] internal 
> method of O with property name P.
> 2. If hasOwn is true return true.
> 3. Let proto be the [[Prototype]] internal property of O.
> 4. If proto is null, return false
> 5. Return the result of calling the [[HasProperty]] internal method of 
> proto with argument P.
>
> In the ES5 world, [[HasOwnProperty]] or "[[GetOwnProperty]]+check if 
> prop !== undefined" is equivalent, but proxies make visible the 
> difference and in the context of the "in" operator, "hasOwn" seems 
> like a more relevant trap to call instead of getOwnPropertydescriptor.
>
> David



More information about the es-discuss mailing list