"var" declarations shadowing properties from Window.prototype

Brendan Eich brendan at mozilla.com
Sun Aug 12 10:27:24 PDT 2012

Boris Zbarsky wrote:
> On 8/10/12 9:00 PM, Jonas Sicking wrote:
>> One potential solution that I think we should keep in mind is to
>> declare that WebIDL properties *on global objects* doesn't go on the
>> prototype chain, but rather on the global objects themselves.
> ...
>> It also has the advantage that Chrome already does this
> Chrome does this for some properties (attributes) but not others 
> (operations).
> I assume you just meant to do this for attributes?  Those are the only 
> cases in which var would call setters, obviously.
> The var shadowing issue is an issue for operations too, of course, but 
> it sounds like that's being solved on the ES side.

Not sure how it is solved if the JS programmer uses 'var'. Using 
'function' will shadow any prototype method (operation) of the same 
name, but then there's no object detection.

IOW, I think your requestAnimationFrame var+object-detection example is 
a good one. No difference in principle from the indexedDB case, and 
possibly only just luck that it has not bitten yet.

> I can live with putting attributes directly on the global.  If we ever 
> add an attribute to EventTarget that will be a little weird because 
> hooking the getter or setter on EventTarget.prototype will affect all 
> event targets _except_ the global, but that's life. 

Is there a WebIDL style guide for helping decide when and where to use 
attributes, or avoid them?


More information about the es-discuss mailing list