- From: Brendan Eich <brendan@mozilla.com>
- Date: Sat, 11 Aug 2012 19:20:46 -0700
- To: Cameron McCormack <cam@mcc.id.au>
- CC: Boris Zbarsky <bzbarsky@mit.edu>, public-script-coord@w3.org, es-discuss@mozilla.org
Cameron McCormack wrote: > Jonas Sicking: >>> Webkit also puts attributes on objects for non-globals, but I'm not >>> promoting that behavior. Nor do I know of any benefits regarding web >>> compatibility that comes with that behavior. > > Brendan Eich: >> Ok, that's what I was getting at. It may be that this is just historical >> consistency for all objects, no global exception, but sounds like we are >> agreeing that the global object needs an exception ("own" promotion of >> attributes and methods) in WebIDL. > > Before ES5 was out, Web IDL put properties for IDL attributes on > instances, exposed via special [[Get]] and [[Put]] behaviour. That > was pretty much what implementations were doing. Not all. Gecko had both custom [[Get]] and [[Put]] (ES3 internal method names) and accessors masquerading as data properties, on prototypes. > Once ES5 standardised accessor properties, we had the opportunity to > make IDL attributes less magical -- which was argued for pretty > strongly by TC39 folks, before Proxies came along. I'm on TC39 and I argued more pragmatically, since at least Gecko had (masquerading) accessors on prototypes. I am leery of a-priori "cleaner = better = right" thinking, especially given web compatibility. > Now perhaps I didn't consider closely enough the possibility of this > being a breaking change (especially on the global object), but it > seemed everyone was happy enough with moving in that direction. And I > think it's a cleaner model for shared properties with getter/setter > behaviour, anyway, and gives you the opportunity to monkeypatch them > that the special [[Get]] and [[Put]] behaviour couldn't. Yes, that's a good thing and it goes back to how I did the DOM level 0 in Netscape 2 -- with (masquerading) accessors and plain old method data properties on prototypes. But the global object -- the window object then -- was quite a bit simpler in its prototype chain. We didn't have window implements EventTarget! > Which is to say that I think we should still push forward with > attributes-as-accessor-properties-on-prototypes at least for objects > other than the global object. Agreed. Jonas and I are talking about an exception for the global object. It's the one on the scope chain. Well, other DOM objects are on scope chains of attribute-expressed event handlers. But such event handlers do not have any problem with var aliasing or shadowing a scope-object's properties (own or inherited). The global object is the exception. /be
Received on Sunday, 12 August 2012 02:21:16 UTC