<div dir="ltr">Notice that whatever we decide on the issue, functionProxy.toString() will work regardless, since you'd be getting the toString method itself through the membrane. functionProxy.toString will be a function proxy for the target.toString method. The invocation on the toString proxy with functionProxy as this will be translated by the membrane back into an invocation of target.toString with target as this.<div><br></div><div>The issue we're debating is only relevant on an edge case -- when explicitly invoking F.p.toString.call(functionProxy).</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 27, 2015 at 10:04 AM, Claude Pache <span dir="ltr"><<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> Le 27 oct. 2015 à 14:14, Boris Zbarsky <<a href="mailto:bzbarsky@mit.edu">bzbarsky@mit.edu</a>> a écrit :<br>
><br>
> On 10/27/15 4:35 AM, Claude Pache wrote:<br>
>> it is that, for any callable object, it will return a string and not throw, because it was so since the dawn of JS.<br>
><br>
> It's totally false for random "host objects" with a [[Call]] in ES5, per spec and in at least some implementations.  As you can tell in Firefox for example:<br>
><br>
>  Function.prototype.toString.call(document.createElement("object"))<br>
><br>
> (though it does not throw for document.all in Firefox, for interesting implementation reasons).<br>
><br>
>> That function will work (in the sense of: will return an answer; I'm not judging the quality of that answer) with anything reasonable fed to it (where "reasonable" excludes things like `(class { static toString() { throw "pwnd!" }})`).<br>
><br>
> Won't work with an HTMLObjectElement in at least some browsers.  How "reasonable" that is, who knows.<br>
><br>
> -Boris<br>
<br>
</span>You're right. But since `document.createElement("object")` does not inherit from `Function.prototype`, the code (`f.toString()`) accidentally works after all.<br>
<br>
(I've tried not to be too smart in my example by writing `f.toString()` instead of `Function.prototype.toString.call(f)`. Maybe I should have been even less smart by defining an instance method on `Function.prototype` instead of a static method on `Function`...)<br>
<span class="HOEnZb"><font color="#888888"><br>
—Claude<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">    Cheers,<br>    --MarkM</div>
</div>