A DOM use case that can't be emulated with direct proxies

David Bruant bruant.d at gmail.com
Thu Dec 13 14:58:14 PST 2012


Le 13/12/2012 20:47, Jason Orendorff a écrit :
> On Wed, Dec 12, 2012 at 3:44 PM, David Bruant <bruant.d at gmail.com 
> <mailto:bruant.d at gmail.com>> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121213/93e9da2f/attachment.html>


More information about the es-discuss mailing list