Le 13/12/2012 20:47, Jason Orendorff a écrit :
On Wed, Dec 12, 2012 at 3:44 PM, David Bruant <[email protected]
<mailto:[email protected]>> wrote:
Le 12/12/2012 22:30, Kevin Reid a écrit :
The JS runtime won't know that the proxy has anything to do with
the actual Window instance. The Proxy's formal target will be
just {};
This target, even if dummy, is the one that will be used for
invariants checks. You can't get away from this by design. This is
one of the most important part of the direct proxies design.
Even if you switch of fake target, the engine will still perform
checks on the dummy internal [[Target]].
I feel we're cycling in what we say and I feel I can't find the
right words to explain my point. One idea would be for you to
implement a target-switching proxy based on direct proxies
(Firefox has them natively or you can use Tom's shim [1]). I'm
confident you'll understand my point through this exercise.
David: https://gist.github.com/4279162
I think this is what Kevin has in mind. Note in particular that the
target of the Proxy is just a dummy object, and the handler ignores it
entirely. The proxy uses it for invariant checks, but the intent is
that those would always pass.
but they do not; try:
var [p, setTarget] = retargetableProxy({}); // I love destructuring
sooo much!
Object.defineProperty(p, 'a', {configurable: false, value:31});
setTarget({});
Object.getOwnPropertyDescriptor(p, 'a'); // invariant check throws here
Any variant that can be written will have the same issue. Even
trickeries with the defineProperty trap.
The proxy is enforcing invariants against the dummy [[target]]. The same
is to be expected from WindowProxy instances even if their underlying
window changes. It doesn't matter if the invariant is enforced on the
dummy target on an actual window instance. It is enforced and that's the
"problem" (with WindowProxy implemented as they are now not being
emulable with proxies)
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss