- From: Cameron McCormack <cam@mcc.id.au>
- Date: Sun, 12 Aug 2012 11:46:18 +1000
- To: Brendan Eich <brendan@mozilla.com>
- CC: Boris Zbarsky <bzbarsky@mit.edu>, public-script-coord@w3.org, es-discuss@mozilla.org
Brendan Eich: > As bz and others point out, the object detection w/ var pattern can > arise for operations, e.g. for requestAnimationFrame, using the same > > var requestAnimationFrame = window.mozRequestAnimationFrame || ... || > window.requestAnimationFrame; > > pattern. So WebIDL operations (JS methods) on the global would be > promoted to "own" too. They'd be configurable, if I recall correctly, > and either writable or replaceable. Do I have that right? OK. So one thing that I think has been pointed out is that moving properties for operations on to window makes it harder to monkeypatch addEventListener and friends. We *could*, if we thought it was important, have the properties on window forward on to the ones from the prototype. Some other questions on specifics: 1. If we don't do that auto-forwarding, does Window.prototype still need to exist? What should window.__proto__ be? 2. If Window.prototype still does exist, should it be empty? 3. The only writable IDL attributes on Window are: attribute DOMString name; attribute DOMString status; attribute WindowProxy? opener; and all of the event handler attributes like "onclick". How do these need to behave if script blithely tries to use variables of the same name? With this: <script> alert([window.status, typeof window.status]); window.status = "hello"; alert([window.status, typeof window.status]); </script> <script> var status; alert([window.status, typeof window.status]); status = 1; alert([window.status, typeof window.status]); </script> Gecko and Opera alert: ,string hello,string ,undefined 1,number while Chrome and Safari alert: ,string hello,string hello,string 1,string which seems to indicate that they're setting the IDL attribute. I guess this is related to whether we want "function onclick(){}" to invoke the setter. With this: <body onerror="alert('exception')"> <script> alert([String(window.onclick), typeof window.onclick)]); </script> <script> var onclick = 1; alert([String(window.onclick), typeof window.onclick]); </script> Gecko, Opera and Chrome alert: null,object 1,number which could mean shadowing or treating "onclick" as IDL type "any" and treating non-Function values as null, while Safari alerts: null,object null,object which looks like it's invoking the setter but ignoring the assignment of a non-Function value.
Received on Sunday, 12 August 2012 01:46:54 UTC