[[Invoke]] and implicit method calls

Allen Wirfs-Brock allen at wirfs-brock.com
Mon Sep 23 18:40:10 PDT 2013


On Sep 23, 2013, at 6:32 PM, Allen Wirfs-Brock wrote:

> 
> On Sep 23, 2013, at 6:14 PM, Kevin Smith wrote:
> 
>> Hi Allen,
>> 
>> Your line of thinking has convinced me that `invoke` as it currently stands doesn't really fly.  However, I have an issue with your proposal.  Take this fragment:
>> 
>>    (1) function f() { doSomethingWith(this); }
>>    (2) f.call(obj);
>> 
>> Presently, the expression at (2) grants the function `f` access to `obj`.  If I understand correctly, under your proposal the expression at (2), in the case where `obj` is a proxy, additionally grants `obj` access to `f`.  Is that right?
> 
> In the case where obj is a Proxy f.call(obj) would give f's handler access to f.

If you wanted to make the call in a way that did not reveal the function to the handler you would code step 2 as:
    Reflect.apply(f, obj, [ ]);

That directly calls [[Call]] on f without going through the proxy

Allen



More information about the es-discuss mailing list