<div class="gmail_quote">On 31 August 2011 15:21, Tom Van Cutsem <span dir="ltr"><<a href="mailto:tomvc.be@gmail.com">tomvc.be@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

I coded up a hypothetical Proxy.createConstructor function that creates a function proxy initialized according to ES5.1 section 13.2: <<a href="https://gist.github.com/1183514" target="_blank">https://gist.github.com/1183514</a>></blockquote>

<div><br></div><div>Nit: invoking callTrap.call assumes that callTrap has an actual call method. But you want to work this for call traps that are themselves proxies and don't necessarily have that (or don't we?). So you need to do</div>

<div><br></div><div>  Function.prototype.apply.call(callTrap, instance, arguments)</div><div><br></div><div>(assuming nobody messed with that either, of course).</div><div><br></div><div>This turns up quite frequently, in fact. With proxies, it is really error-prone that all these functions have been made available as methods on {Object,Function}.prototype, instead of being separate. Morally, these methods used to be part of the implicit contracts of object and function types that everybody relies on. But proxies break those contracts! At least for functions, this is really a problem IMO (for plain objects, the contract was already invalidated by allowing Object.create(null)).</div>

<div><br></div><div>/Andreas</div><div><br></div></div>