- From: Mark S. Miller <erights@google.com>
- Date: Thu, 2 Apr 2015 15:45:07 -0400
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CABHxS9ggBHwTGVc8-rsZADv6DWjnd4WAQ0kGmR_v6z+24Uc=eg@mail.gmail.com>
Ok, I understand this response, but perhaps not your original message. If
the property on the named properties object isn't changeable, is the only
reason for setting [[Writable]] to true to avoid the override mistake? (If
so, I agree this is an adequate reason.)
On Thu, Apr 2, 2015 at 3:26 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> On 4/2/15 3:04 PM, Mark S. Miller wrote:
>
>> If you initialize [[Writable]] to true, allow assignments, and have the
>> resulting value be the value assigned
>>
>
> Hold on.
>
> Let's look at my testcase again:
>
> <div id="x"></div>
> <script>
> x = 5;
> alert(x);
> </script>
>
> When this script runs, its environment is the global environment. The
> global has an object (the "named properties object"; it's very like a
> proxy) on its prototype chain which has the special [[GetOwnProperty]]/[[DefineOwnProperty]]
> under discussion. Its [[GetOwnProperty]] for "x" returns a descriptor for
> a value property whose value is the <div> element.
>
> The bareword assignment is happening with the global as receiver. So if
> the "x" property on the named properties object is writable, then
> assignment to x as above will [[DefineOwnProperty]] on the global itself,
> not on the named properties object. All good so far.
>
> Now let's consider this testcase:
>
> <div id="x"></div>
> <script>
> x = 5;
> delete x;
> alert(x);
> </script>
>
> This alerts "[object HTMLDivElement]" in all browsers, as expected:
> nothing ever changed the value of the "x" property on the named properties
> object; we just shadowed it, then deleted the shadowing property.
>
> So it's not that we have the "resulting value be the value assigned";
> we're just shadowing.
>
> why not have [[DefineOwnProperty]] also succeed for these cases?
>>
>
> So this is really about cases in which someone does assingment directly on
> the named properties object, not on the global, or does an
> Object.defineProperty on the named properties object.
>
> We _could_ allow people to do that. It requires a lot more complexity in
> spec and implementations in terms of defining the interaction of the
> proxy-like bits of the named properties object and these user-defined
> properties. It's a lot simpler to just say that this particular proxy
> never allows properties to be added to it, other than the ones its handler
> wants to expose, than to specify/implement how it should behave if it were
> to allow them.
>
> -Boris
>
--
Cheers,
--MarkM
Received on Thursday, 2 April 2015 19:45:35 UTC