<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2013/6/9 Dmitry Soshnikov <span dir="ltr"><<a href="mailto:dmitry.soshnikov@gmail.com" target="_blank">dmitry.soshnikov@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
On Jun 8, 2013, at 3:30 AM, Till Schneidereit wrote:<br>
<br>
> At the last TC39 meeting, an agreement was reached for proxies to support an Invoke trap.<br>
<br>
</div>Finally (I remember that long thread 2 years ago when I was advocating for it).<br>
<br>
Curious what was the reasoning behind this now, since as I understand the invoke trap wont' be for "virtual" (non-existing methods), but still for real function objects returned from the invoke trap -- in order to keep extracting to a var invariant working. If the later should be preserved, then the [[Get]] should be called anyways as I see.</blockquote>
<div style><br></div><div style>The main reason behind adding invoke() was to make rebinding |this| easy and efficient upon forwarding, essentially to make examples such as the following work:<br></div><div style><br></div>
<div style>var date = new Date()</div><div style>var proxy = new Proxy(date, {</div><div style>  invoke: function(target, name, args, rcvr) {</div><div style>    return target[name].apply(target, args); // note, |this| bound to target inside forwarded method, not to |rcvr| (= the proxy itself)</div>
<div style>  }</div><div style>});</div><div style><br></div><div style>proxy.getFullYear() // works fine, no "error: not a Date" exception</div><div style><br></div><div style>Cheers,</div><div style>Tom</div></div>
</div></div>