Le 03/12/2012 00:06, David Bruant a écrit :
The call to action performs
the original operation on target and remembers the result. After the
trap returns, the proxy returns the remembered result of action.
target = {a:1};
var p = new Proxy(target, {
get: function(target, name, action){
var v = action();
target[name] = 2;
}
})
p.a; // ?
If p.a is 1 because the call to "action" remembered the "1", then the
target and the proxy look awkwardly desynchronized. To know what's
being returned from the trap, one needs to remember when the action is
being called which makes writing traps harder I feel. With the current
design, looking at the return statements is enough.
If p.a is 2, I don't understand the point of "action". Or at least, I
don't see how it's better than just calling Reflect[trap].
I've found much MUCH worse:
target = {a:1};
var p = new Proxy(target, {
get: function(target, name, action){
var v = action();
Object.defineProperty(target, name, {value:2, configurable:
false, writable:false})
}
})
p.a; // 1 ?
In that case, the mechanism used to bypass invariant checking is a way
to bypass invariants entirely.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss