W3C home > Mailing lists > Public > public-script-coord@w3.org > July to September 2012

Re: "var" declarations shadowing properties from Window.prototype

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Thu, 16 Aug 2012 02:24:09 -0400
Message-ID: <502C9209.1070803@mit.edu>
To: Brendan Eich <brendan@mozilla.com>
CC: Travis Leithead <travis.leithead@microsoft.com>, Brandon Benvie <brandon@brandonbenvie.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>, "es-discuss@mozilla.org" <es-discuss@mozilla.org>
On 8/15/12 5:08 PM, Brendan Eich wrote:
> Usually window.[standardized property name] is last -- this matters below.

I don't see how it matters at all, actually.

>> Firefox is affected by this problem (e.g., the result of the var
>> declaration is undefined)
>> Chrome is not affected by this problem because their var creation
>> algorithm checks the prototype chain for an existing property name
> No, Chrome is not affected because their IDL bindings put inherited
> attributes on the global object as "own" accessors.

It's not affected for both reasons, at least in the last version of 
Chrome I tested.

> That's true, but see above point about order of || terms.

Again, the order of the || terms doesn't matter.  "X || undefined" and 
"undefined || X" both evaluate to X as long as X is not falsy.

> No. Rather, the erratum at
> https://bugs.ecmascript.org/show_bug.cgi?id=78 was already fixed by
> Mozilla, Google, Opera, and I believe IE and Apple.

It's not fixed by Apple as of the 2012-08-06 WebKit nightly.

It does seem to be fixed in Chrome dev (22.0.1229.6).  It's not fixed in 
Chrome beta (21.0.1180.79).  We'll see if and when the fix makes it to a 
final release, but in the meantime what's out there in users' hands 
right now does not have the fix.

> Also, WebIDL-reliant spec authors must be careful not to define get-only
> accessors (readonly attributes) on the global object or interfaces from
> which it inherits. This leads to the idea that the global object
> defaults to [Replaceable] (which may be removed from WebIDL as explicit
> qualifier syntax) and [Unforgeable] must be used selectively for some
> few historic exceptions.

Note that there is a middle ground between [Replaceable] and 
[Unforgeable], which is where most props on the global live right 
now....  I suspect for web compat we may want to default all future 
stuff to being [Replaceable] but grandfather in the existing 
non-replaceable things.

Received on Thursday, 16 August 2012 06:24:39 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:14:07 UTC