- From: Cameron McCormack <cam@mcc.id.au>
- Date: Wed, 20 Jun 2012 16:59:07 +1000
- To: Jason Orendorff <jason.orendorff@gmail.com>
- CC: public-script-coord <public-script-coord@w3.org>
Jason Orendorff: > Arrays are iterable, because there's a new built-in > Array.prototype.iterator method. Many DOM objects should be iterable > too. Certainly those with indexed properties and .length: > > for (var elt of document.querySelectorAll(".post:not(.grouchy)")) > addUnicorns(elt); > > Possibly also dictionaries and DOM iterators. > > Thoughts? Sounds good to me, in general. Since platform array objects and instances of interfaces annotated with [ArrayClass] have Array.prototype as their [[Prototype]], the intentionally generic Array.prototype.iterator should just work on them. The interface prototype object for interfaces that support indexed properties should automatically get an iterator method. Should objects with named properties automatically get an iterator method? I'm not sure. If not, or if there will there be interfaces that don't use indexed or named properties but which do want to expose an iterator, we could use a declaration like this: interface Bag { void addItem(DOMString s); void removeItem(DOMString s); DOMString iterator; }; which here says that the iterator will always return DOMString values. That could also be used to override the default iteration behaviour of an interface with indexed properties. I don't think dictionaries should have iterators, since they are used mostly by an author to pass in a bunch of named values (with a fixed set of names) into an IDL operation; they're just plain JS objects. Should callback interfaces allow iterators? I don't think so, just like we prevent getters/setters/etc. from being defined on them. By "DOM iterators" above did you mean NodeIterators and TreeWalkers from DOM Traversal: http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator or interfaces like NodeList and HTMLCollection?
Received on Wednesday, 20 June 2012 06:59:39 UTC