- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 26 May 2011 12:05:47 +1200
- To: David Flanagan <dflanagan@mozilla.com>
- Cc: public-script-coord@w3.org
David Flanagan:
> §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?
Yes that was 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.
I think that’s a fine idea; let’s do that.
> (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?)
We could do that. It might be easier just to disallow freezing of all
objects that support indexed/named properties, though.
--
Cameron McCormack ≝ http://mcc.id.au/
Received on Thursday, 26 May 2011 00:06:23 UTC