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

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

From: Brendan Eich <brendan@mozilla.com>
Date: Sun, 12 Aug 2012 10:49:50 -0700
Message-ID: <5027ECBE.8090808@mozilla.com>
To: Boris Zbarsky <bzbarsky@MIT.EDU>
CC: Cameron McCormack <cam@mcc.id.au>, public-script-coord@w3.org, es-discuss@mozilla.org
Boris Zbarsky wrote:
> On 8/12/12 1:31 PM, Brendan Eich wrote:
>> There's still a problem for getter-less attributes including 
>> indexedDB, so

[setter-less]

>> something *still* has to change there!
>
> I'm not sure I follow this.  If indexedDB is on the global as an own 
> property, what issue remains with it?

A var indexedDB in global scope where the global object has such a 
get-only accessor will not clobber the existing property, but the 
var+obj-detection pattern initializes the variable:

   var indexedDb = ... || window.indexedDB;

and that will fail in strict mode (thanks, you point that out below):

js> void Object.defineProperty(this, 'foo', {get: function(){return 42}})
js> foo
42
js> var foo = 42
js> "use strict"; var foo = 43
typein:4: TypeError: setting a property that has only a getter

>> The global needs to be a flat object (only
>> implementation-specific magic protos along a chain ending in
>> Object.prototype).
>
> The magic from the global scope polluter isn't even impl-specific.

Right, HTML5 -- thanks to old IE :-|.

>> And we still need to be careful about writability (get-only indexedDB
>> point above).
>
> Ah, you meant setter-less above?

D'oh, yes.

> Only a problem in strict mode, right?

Right.

/be
Received on Sunday, 12 August 2012 17:50:21 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 8 May 2013 19:30:06 UTC