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

Reply via email to