[[Invoke]] vs [[Get]]

Tom Van Cutsem tomvc.be at gmail.com
Sun Jun 9 08:18:47 PDT 2013

2013/6/8 Till Schneidereit <tschneidereit at gmail.com>

> I just saw that Jason identified some additional open questions in [1]:
> 1. What happens when we call a method on an object whose [[Prototype]] is
> a proxy with an invoke trap?
>     var p = new Proxy({}, {invoke: ...});
>     var q = Object.create(p);
>     q.f();
> Does this trigger p's invoke trap?

Yes. "invoke", like "get", "set", "has" and "enumerate" should be one of
the traps that can be called on a proxy used as a prototype.

> 2. What happens when a proxy with an invoke trap is used in a with-block?
>     with (p)
>         f();
Well, I guess it should trigger the invoke trap, just like writing simply
"f" would trigger the proxy's get trap.

> 3. When exactly do we check for an invoke trap, and when do we call it?
> How does that affect 11.2.3?
>   https://people.mozilla.com/~jorendorff/es6-draft.html#sec-11.2.3
> In an expression like p.f(), do we still evaluate "p.f" as in 11.2.3 step
> 1?

No, we can't just blindly call GetValue in step 1 as that would lead to the
"get" trap being invoked on a proxy (which is the wrong trap).

I believe Allen had previously experimented with an invoke trap (called
"callProperty") in a fork of the ES6 draft. Allen, can you comment on how
you would see [[Invoke]] specced?

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

More information about the es-discuss mailing list