- From: David Flanagan <dflanagan@mozilla.com>
- Date: Wed, 25 May 2011 12:15:36 -0700
- To: public-script-coord@w3.org
§4.5.2 indicates that indexed properties won't be added to an object if
its [[Extensible]] attribute is false. I take this to mean that
conforming objects will work like regular JavaScript objects for
Object.preventExtensions() as well as Object.seal() and
Object.freeze(). Is this the intent?
Let's take NodeList as a concrete example, keeping in mind that DOM Core
requires that the childNodes property of a Node always returns the same
NodeList object and that that object is live:
var div = document.createElement("div");
div.appendChild(document.createTextNode("test"));
var kids = div.childNodes; // a NodeList
kids.freeze() // This should work, right?
// I think this should succeed despite the freeze() above, right?
div.appendChild(document.createTextNode("foo"));
div.childNodes[0] // => the original text node "test"
div.childNodes[1] // => undefined because of freeze
div.childNodes.length; // But this is 2, right?
div.childNodes.item(1); // What does this return?
This seems like a nasty can of worms to me. A simpler approach would be
to require an implementation to throw a TypeError on any attempt to set
[[Extensible]] to false on an object that has an indexed getter. It
just doesn't make sense to be able to freeze a live collection.
(Does WebIDL need to make a distinction between interfaces that are live
and those that are not? Should there be a [Freezeable] attribute for
non-live interfaces with indexed getters?)
David
Received on Wednesday, 25 May 2011 19:16:05 UTC