Le 01/08/2012 14:25, David Bruant a écrit :
The "big saving" is that the public->private mapping and return value
boilerplate code to be put in all name-accepting traps is entirely
replaced by a one-liner in the handler definition. Something like
"isPrivateNameKnown: Set.prototype.has.bind(privateNamesIKnow)"
(privateNamesIKnow is either shared in handler function scopes or as a
handler property or something else, left at the discretion of the author).
It's likely to be a slightly bit more efficient in both time (no need
for the after-trap private name checking, no need for public->private
nor for the 2-properties array) and memory (no need for public
counterparts any longer).
Also, public->private resolution and returning the right private name
seems more error prone than if you're being handed the private name
directly as an argument. Maybe debatable.
To follow-up on that part, here is a gist with the difference between
what the current proposal is and the alternative proposal [1]. The gists
focuses only on the parts that would differ from one proposal to the
other. Specifically, I've omitted the update of the WeakMap/WeakSet
which is necessary to do manually in both cases.
Besides the reduced boilerplate, the exercice of writing this made me
realize that the setName and definePropertyName traps of the current
proposal leak the value to be set to the target when the private name is
unknown. This makes the protection of getName and
getOwnPropertyDescriptorName return values somewhat ridiculous.
Also, I've changed my initial proposal a bit with regard to unknown
private names. Now, there is just one trap that's called when that
happens. No argument is passed, only the operation as a string ('get',
'set', 'hasOwn', etc.). As Tom noted, the only useful thing one can do
when the private name is unknown is throw or forward, so this trap lets
you decide based on which operation is being performed (this can
probably be useful for read-only proxies)
David
[1] https://gist.github.com/3232772
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss