[[Invoke]] and implicit method calls
allen at wirfs-brock.com
Fri Sep 20 17:43:15 PDT 2013
On Sep 20, 2013, at 4:27 PM, Brandon Benvie wrote:
> On 9/20/2013 12:19 PM, Jason Orendorff wrote:
>> what's the justification for .hasOwn()?
>> a) allows more direct interception of Object.prototype.hasOwnProperty()
>> b) potentially less allocations each time someone calls .hasOwnProperty().
>> I think .hasOwn() should be removed.
> Actually, taking the precedent of removing "getPropertyDescriptor", it's "has" that would be removed. The implementation of [[Has]] can easily walk the [[GetPrototype]] chain calling "hasOwn" on each until true or [[GetPrototype]] returns null. In fact, some agreed for a short time to *remove* the "has" trap specifically for this reason, but it was added back.
[[Get]] and [[Set]] enable an exotic object to define its own property lookup semantics that isn't necessary the same as a simple "follow the [[Prototype]] chain until a matching own property is found". For example, they could use some sort of multiple inheritance resolution algorithm. [[HasProperty]] is needed to allow an external client to check for the existence of a property using the same algorithm as [[Get]] and [[Set]].
Of course, it is the responsibility of the implementor of the exotic object to actually use the same lookup algorithm for [[Get]], [[Set]], [HasProperty]], and [[Invoke]].
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss