File tree Expand file tree Collapse file tree 1 file changed +5
-2
lines changed Expand file tree Collapse file tree 1 file changed +5
-2
lines changed Original file line number Diff line number Diff line change @@ -139,6 +139,7 @@ ES6 的有些数据结构原生具备 Iterator 接口(比如数组),即不
139
139
- String
140
140
- TypedArray
141
141
- 函数的 arguments 对象
142
+ - NodeList 对象
142
143
143
144
下面的例子是数组的` Symbol.iterator ` 属性。
144
145
@@ -156,7 +157,7 @@ iter.next() // { value: undefined, done: true }
156
157
157
158
对于原生部署 Iterator 接口的数据结构,不用自己写遍历器生成函数,` for...of ` 循环会自动遍历它们。除此之外,其他数据结构(主要是对象)的 Iterator 接口,都需要自己在` Symbol.iterator ` 属性上面部署,这样才会被` for...of ` 循环遍历。
158
159
159
- 对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作Map结构使用 ,ES5 没有 Map 结构,而 ES6 原生提供了。
160
+ 对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作 Map 结构使用 ,ES5 没有 Map 结构,而 ES6 原生提供了。
160
161
161
162
一个对象如果要具备可被` for...of ` 循环调用的 Iterator 接口,就必须在` Symbol.iterator ` 的属性上部署遍历器生成方法(原型链上的对象具有该方法也可)。
162
163
@@ -263,7 +264,9 @@ NodeList.prototype[Symbol.iterator] = [][Symbol.iterator];
263
264
[... document .querySelectorAll (' div' )] // 可以执行了
264
265
```
265
266
266
- 下面是类似数组的对象调用数组的` Symbol.iterator ` 方法的例子。
267
+ NodeList 对象是类似数组的对象,本来就具有遍历接口,可以直接遍历。上面代码中,我们将它的遍历接口改成数组的` Symbol.iterator ` 属性,可以看到没有任何影响。
268
+
269
+ 下面是另一个类似数组的对象调用数组的` Symbol.iterator ` 方法的例子。
267
270
268
271
``` javascript
269
272
let iterable = {
You can’t perform that action at this time.
0 commit comments