Calling toString on function proxy throws TypeError exception
Mark S. Miller
erights at google.com
Tue Oct 27 14:52:43 UTC 2015
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.
The issue we're debating is only relevant on an edge case -- when
explicitly invoking F.p.toString.call(functionProxy).
On Tue, Oct 27, 2015 at 10:04 AM, Claude Pache <claude.pache at gmail.com>
wrote:
>
> > Le 27 oct. 2015 à 14:14, Boris Zbarsky <bzbarsky at mit.edu> a écrit :
> >
> > On 10/27/15 4:35 AM, Claude Pache wrote:
> >> it is that, for any callable object, it will return a string and not
> throw, because it was so since the dawn of JS.
> >
> > 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:
> >
> > Function.prototype.toString.call(document.createElement("object"))
> >
> > (though it does not throw for document.all in Firefox, for interesting
> implementation reasons).
> >
> >> 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!" }})`).
> >
> > Won't work with an HTMLObjectElement in at least some browsers. How
> "reasonable" that is, who knows.
> >
> > -Boris
>
> You're right. But since `document.createElement("object")` does not
> inherit from `Function.prototype`, the code (`f.toString()`) accidentally
> works after all.
>
> (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`...)
>
> —Claude
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
--
Cheers,
--MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151027/90efa674/attachment.html>
More information about the es-discuss
mailing list