[Harmony proxies] Thoughts on function proxies

David Bruant bruant at enseirb-matmeca.fr
Mon Mar 14 16:52:59 PDT 2011


Hi,

I've been thinking about Function proxy use cases lately. Things that
the spec do and that could be convenient to emulate as well or just
things that could be useful.
* [[Construct]]-less functions.
All Array.prototype methods are like that as well as all global object
methods (parseInt...) as well as a most of built-in methods. In some
way, if you want to define function which wouldn't make sense as
constructors (Math functions are a caricature of that),
[[Construct]]-less functions would be a good way to raise error if
someone, by accident, write "new blabla()" or even "new blabla".
It has been suggested here:
https://mail.mozilla.org/pipermail/es-discuss/2011-March/013019.html
I think that it was a bit too hacky. I would suggest more of a syntax like:
var pf = Proxy.createFunction({}, myCall, null);

* [[Call]]-less constructors
Already possible throughpf = Proxy.createFunction({}, null, myConstructor);

* "new A" behaves exactly like "A". This can be found for Arrays for
instance.
Already possible through pf = Proxy.createFunction({}, myCall, undefined);


Finally, I'd like to add a note on constructors. On the proposal is
written: "If no constructTrap is provided, new proxy(...args) is reified
as calling the proxy's callTrap with |this| bound to a new object
delegating to proxy.prototype".
In order to clarify, I think that instead of "proxy.prototype" it would
be better to say "the result of calling the get trap on the proxy with
argument 'prototype'". The get trap is the equivalent tothe [[Get]]
internal method used in ES5.1 13.2.2step 5.
Or maybe saying that the [[Construct]]algorithm (13.2.2) will be used.

David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110315/4143fa03/attachment.html>


More information about the es-discuss mailing list