Function proxy length (Was: length property value for functions with parameter enhancements)
Tom Van Cutsem
tomvc.be at gmail.com
Mon Aug 29 07:43:29 PDT 2011
(changed subject to fork off discussion on function proxies)
2011/8/29 Allen Wirfs-Brock <allen at wirfs-brock.com>
> On Aug 27, 2011, at 6:12 AM, Andreas Rossberg wrote:
> > True, and actually, there are more issues with length & function
> > proxies. I don't have my notes with me right now, but for example, it
> > is not clear at all what length Function.prototype.bind should set
> > when called on a function proxy. 0? 1? Should it try to get the length
> > property from the proxy and subtract N? What if length is not defined
> > on the proxy, or not a (natural) number?
> The ES5.1 spec. defines how how bind determines the length for the
> function it creates based upon the length property of the target function.
> I would expect the same rules would apply when the target is a function
I see two options here:
a) either query the function proxy for its "length" property via its "get"
trap, and convert the result using ToInteger, introducing a new error case
if the conversion fails.
b) or determine "length" based on the function proxy's call trap (which is
presumably a non-proxy function. If it is a function proxy itself, recurse)
The spec currently uses the wording: "Let L be the length property of Target
..." (ES5.1 section 126.96.36.199)
If that is not equivalent to "Let L be the result of calling the [[Get]]
internal method of Target with argument "length"", then option b) seems
There is precedent for using the call trap as a substitute for the function
proxy: Function.prototype.toString.call(aFunctionProxy) will also use the
call trap's toString representation rather than trapping the handler.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss