mozilla

Compare Revisions

1.7

Change Revisions

Revision 124961:

Revision 124961 by Tag on

Revision 124962:

Revision 124962 by Savetheclocktower on

Title:
1.7
1.7
Slug:
Talk:JavaScript/New_in_JavaScript/1.7
Talk:JavaScript/New_in_JavaScript/1.7
Content:

Revision 124961
Revision 124962
tt72    <h3 name="Syntax_for_replacing_native_iterators.3F">
73      Syntax for replacing native iterators?
74    </h3>
75    <blockquote>
76      If you wish to provide a custom iterator, you should overri
 >de the getter for __iterator__ to return an instance of your cust
 >om iterator.
77    </blockquote>
78    <p>
79      I'm having trouble finding the precise syntax to override t
 >hese native iterators.
80    </p>
81    <p>
82      Let's say I want to rewrite the DOM <code>HTMLCollection</c
 >ode> iterator to return only nodes and ignore the builtin propert
 >ies (length, item, and namedItem). My code looks something like t
 >his:
83    </p>
84    <pre>
85    var DOMIterator = function(nodeList) {
86      var len  = nodeList.length, i = 0, ret;
87      for (i = 0; i &lt; len; i++) {
88        yield [i, nodeList[i]];
89      }
90      throw StopIteration;
91    };
92    
93    var nodes = document.getElementsByTagName('p');
94    
95    nodes.__defineGetter__("__iterator__", function() {
96      return new DOMIterator(this);
97    });
98    
99</pre>
100    <p>
101      When I evaluate <code>nodes.__iterator__</code>, I get <cod
 >e>{{mediawiki.external('object Generator')}}</code>. But when I t
 >ry <code>for (var x in nodes) { /* do something */ }</code>, I ge
 >t a <code>TypeError</code> ("<code>nodes has invalid __iterator__
 > value ({})</code>").
102    </p>
103    <p>
104      I'm sure I've overlooked something simple, but I've tried a
 > crapload of variations on this theme — making the iterator retur
 >n a function, removing the <code>yield</code> statement and defin
 >ing an ordinary <code>next</code> method, etc. What am I doing wr
 >ong? <a href="User:Savetheclocktower">Savetheclocktower</a> 11:46
 >, 29 July 2006 (PDT)
105    </p>

Back to History