- From: Adam Barth <abarth@chromium.org>
- Date: Wed, 16 Apr 2014 08:43:44 -0700
- To: Rick Waldron <waldron.rick@gmail.com>
- Cc: Domenic Denicola <domenic@domenicdenicola.com>, "Mark S. Miller" <erights@google.com>, Toon Verwaest <verwaest@chromium.org>, Boris Zbarsky <bzbarsky@mit.edu>, Adam Klein <adamk@chromium.org>, "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CAP=28cckpb84scmZTVFGQy7SUbUoWsy4KCV3pQ07_40upnZzzQ@mail.gmail.com>
On Wed, Apr 16, 2014 at 8:35 AM, Rick Waldron <waldron.rick@gmail.com>wrote: > On Wed, Apr 16, 2014 at 10:23 AM, Adam Barth <abarth@chromium.org> wrote: > >> On Wed, Apr 16, 2014 at 7:13 AM, Adam Barth <abarth@chromium.org> wrote: >> >>> On Wed, Apr 16, 2014 at 6:57 AM, Domenic Denicola < >>> domenic@domenicdenicola.com> wrote: >>> >>>> Let’s put it this way; perhaps what Mark’s saying will be clearer. >>>> >>>> Given: >>>> >>>> ```js >>>> const m = new Map(); >>>> m.set(windowProxyInstance, "foo"); >>>> ``` >>>> >>>> (and given that nothing else is added to `m`), then `m.get(x) === >>>> "foo"` should be true _if and only if_ SameValueZero(x, >>>> windowProxyInstance) is true (which in this case reduces to `x === >>>> windowProxyInstance`). >>>> >>>> Window proxies should do nothing to violate this invariant of `Map`s. >>>> >>>> With that in mind, is there something special about window proxies that >>>> would allow them to abide by this invariant but still run into the >>>> questions and problems stated in this thread? >>>> >>> >>> Presumably you would agree that if I wrote: >>> >>> windowProxyInstance = someOtherObject; >>> >>> then operator=== questions about windowProxyInstance wouldn't be >>> relevant for answering questions about how m.get behaves. >>> >>> One way of phrasing the original question is asking whether navigating a >>> browsing context keeps the identity of the windowProxyInstance constant or >>> whether the identity of the windowProxyInstance changes and all fields >>> containing a reference to the previous windowProxyInstance are updated to >>> refer to the new windowProxyInstance. >>> >>> I don't believe there's an experiment you can run today in browsers to >>> answer that question. Map would give you a way to answer that question, >>> which is why we need to decide what the answer ought to be. >>> >> >> It might be interesting to think about how private names interact with >> WindowProxy. >> >> var tools = (function () { >> private unique; >> function store(x) { x.unique = 42; } >> function check(x) { return x.unique === 42; } >> return { store: store, check: check }; >> })(); >> > > Is this a hypothetical language feature? There are no private names and no > private keyword in ES6. > Oh, sorry. I'm not sure what stage the various proposals are in. I grabbed the syntax from http://wiki.ecmascript.org/doku.php?id=strawman:private_names If private names are still viewed as futuristic, we can worry about resolving these inconsistencies when they come over the horizon. Adam
Received on Wednesday, 16 April 2014 15:44:36 UTC