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.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss