Re: WindowProxy as the key in ES6 Set/Map/WeakSet/WeakMap

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.

Rick

Received on Wednesday, 16 April 2014 15:35:51 UTC