From 7d57425beb95cf8bbcbbfe96cbce3086e66fd868 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Mon, 2 May 2016 10:22:18 +0800 Subject: [PATCH] docs(generator): edit Symbol.iterator --- docs/generator.md | 19 +++++++++++++++++-- docs/iterator.md | 2 +- docs/symbol.md | 15 ++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/docs/generator.md b/docs/generator.md index c315a7c..ed490ab 100644 --- a/docs/generator.md +++ b/docs/generator.md @@ -183,9 +183,24 @@ let input = yield; // OK ### 与Iterator接口的关系 -上一章说过,任意一个对象的`Symbol.iterator`方法,等于该对象的遍历器对象生成函数,调用该函数会返回该对象的一个遍历器对象。 +上一章说过,任意一个对象的`Symbol.iterator`方法,等于该对象的遍历器生成函数,调用该函数会返回该对象的一个遍历器对象。 -遍历器对象本身也有`Symbol.iterator`方法,执行后返回自身。 +由于Generator函数就是遍历器生成函数,因此可以把Generator赋值给对象的`Symbol.iterator`属性,从而使得该对象具有Iterator接口。 + +```javascript +var myIterable = {}; +myIterable[Symbol.iterator] = function* () { + yield 1; + yield 2; + yield 3; +}; + +[...myIterable] // [1, 2, 3] +``` + +上面代码中,Generator函数赋值给`Symbol.iterator`属性,从而使得`myIterable`对象具有了Iterator接口,可以被`...`运算符遍历了。 + +Generator函数执行后,返回一个遍历器对象。该对象本身也具有`Symbol.iterator`属性,执行后返回自身。 ```javascript function* gen(){ diff --git a/docs/iterator.md b/docs/iterator.md index a27cf80..5641c39 100644 --- a/docs/iterator.md +++ b/docs/iterator.md @@ -110,7 +110,7 @@ interface IterationResult { Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即`for...of`循环(详见下文)。当使用`for...of`循环遍历某种数据结构时,该循环会自动去寻找Iterator接口。 -ES6规定,默认的Iterator接口部署在数据结构的`Symbol.iterator`属性,或者说,一个数据结构只要具有`Symbol.iterator`属性,就可以认为是“可遍历的”(iterable)。调用`Symbol.iterator`方法,就会得到当前数据结构默认的遍历器生成函数。`Symbol.iterator`本身是一个表达式,返回Symbol对象的iterator属性,这是一个预定义好的、类型为Symbol的特殊值,所以要放在方括号内(请参考Symbol一章)。 +ES6规定,默认的Iterator接口部署在数据结构的`Symbol.iterator`属性,或者说,一个数据结构只要具有`Symbol.iterator`属性,就可以认为是“可遍历的”(iterable)。调用`Symbol.iterator`方法,就会得到当前数据结构默认的遍历器生成函数。`Symbol.iterator`本身是一个表达式,返回Symbol对象的`iterator`属性,这是一个预定义好的、类型为Symbol的特殊值,所以要放在方括号内(请参考Symbol一章)。 在ES6中,有三类数据结构原生具备Iterator接口:数组、某些类似数组的对象、Set和Map结构。 diff --git a/docs/symbol.md b/docs/symbol.md index 9a54d5b..938e239 100644 --- a/docs/symbol.md +++ b/docs/symbol.md @@ -517,7 +517,20 @@ separator[Symbol.split](this, limit) ### Symbol.iterator -对象的Symbol.iterator属性,指向该对象的默认遍历器方法,即该对象进行for...of循环时,会调用这个方法,返回该对象的默认遍历器,详细介绍参见《Iterator和for...of循环》一章。 +对象的`Symbol.iterator`属性,指向该对象的默认遍历器方法。 + +```javascript +var myIterable = {}; +myIterable[Symbol.iterator] = function* () { + yield 1; + yield 2; + yield 3; +}; + +[...myIterable] // [1, 2, 3] +``` + +对象进行`for...of`循环时,会调用`Symbol.iterator`方法,返回该对象的默认遍历器,详细介绍参见《Iterator和for...of循环》一章。 ```javascript class Collection {