[[Invoke]] and implicit method calls

Allen Wirfs-Brock 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.
> 
> https://mail.mozilla.org/pipermail/es-discuss/2012-November/026274.html

[[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]].

Allen

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130920/848cca73/attachment.html>


More information about the es-discuss mailing list