July TC39 meeting notes, day 1

David Bruant david.bruant at labri.fr
Thu Jul 28 11:34:34 PDT 2011


Le 28/07/2011 19:52, Andreas Rossberg a écrit :
> On 28 July 2011 10:35, David Bruant <david.bruant at labri.fr> wrote:
>> Le 28/07/2011 06:21, Brendan Eich a écrit :
>>> == Handler access to proxies ==
>>>
>>> Proxy handler traps need to receive the proxy as a parameter: first, or
>>> last?
>>>
>>> Last allows trap implementors to leave |proxy| off. It's also a compatible
>>> extension to the proposal and its prototype implementations. Putting |proxy|
>>> last may also steer implementors away from touching proxy, reducing the bugs
>>> where you infinitely diverge.
>>>
>>> First is more normal-order (proxy, name) and some find it more
>>> aesthetically pleasing.
>>>
>>> Another alternative: the proxy could be "passed" via a data property on
>>> the handler.
>> I think we discussed already the idea of "proxy" being passed as a data
>> property to the handler and came to the conclusion that it may not be a good
>> idea, because it breaks the stratification. If two proxies use the same
>> handler as in [2], then, there is an ambiguity on what the value of this
>> property should be.
> The solution we discussed is to simply use prototypes. That is, share
> handler methods by putting them on a (single) prototype object, and
> have per-proxy instances that carry the individual proxy references
> (or other per-proxy data, for that matter).
This is a pattern that I have seen used by Tom a lot and that I really
like too, but you can't force a user to do that.
So I assume, you would systematically add a base object and use the
argument handler as its prototype?

---
// h is a handler object
var p1 = Proxy.create(h);
var p2 = Proxy.create(h);
---
When a user does this, what does he want? To use the exact same handler
(same object identity)? Or to use the same logic but different internal
properties?
The solution you discussed seems to assume the latter, but who knows?
And how do I implement the former if the proxy spec imposes that the
object I pass internally becomes another object?

Now that I think about it, it's a bit weird that the proxy API allows to
create several proxies with the same handler (same object identity).
Maybe the API could be reworked in order to prevent it? Maybe
Proxy.create should return the same proxy object if provided the same
handler (p1 === p2, here)?

David


More information about the es-discuss mailing list