ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用

可迭代接口

随着ES中有结构的数据类型越来越多,提供了一种能被for…of…遍历数据结构的标准。
实现可迭代接口Iterable接口就是for…of…的前提。只要实现了该接口,就能被for…of…遍历访问。
所以内部必须要去挂载一个iterator方法,方法需要返回一个带有next()方法的对象,不断调用这个方法就能实现遍历。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用

实现可迭代接口

ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用
以上述代码为例, 一共包含了三层对象,第一层就是选中的部分,我们自定义的这个对象,这个对象实现了可迭代接口(iterable),这个接口的约定就是内部必须要有一个用于返回迭代器的iterator方法。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用
第二层为iterator返回的这个对象,它实现了迭代器接口(iterator),这个接口约定就是内部必须有一个用于迭代的next方法。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用
最后一层就是next方法返回的对象,这个对象实现了迭代结果接口(iterationResult),这个接口约定就是在对象内部必须有一个value属性表示当前迭代到的值,还有一个done用来表示迭代是否以及介绍。

在此基础之上就能使用for…of…对该对象进行遍历。

迭代器模式

迭代器模式就是对外提供统一接口,让开发者不用再担心内部的数据结构就能进行遍历。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用

生成器

在ES2015中还新增了一个生成器函数(Generator),新特性的作用是为了避免异步编程中回调嵌套过深,提供更好的异步编程解决方案。
生成器函数的定义就是在函数名前加一个*,并且生成器函数的运用必须要结合yield来使用。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用
由此可知,生成器函数也实现了可迭代接口,在调用一次next方法就可以打印接下来的语句。

总结:生成器函数会自动返回一个生成器对象,调用这个对象的next方法,才会让这个函数的函数体执行,执行过程中一旦遇到了yield关键词,函数的执行就会被暂停,yield的值将会作为next的结果返回。继续调用next,函数就会从暂停的位置继续开始执行。

生成器应用

1.发号器
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用
2.也可以用来改进我们之前的迭代器模式,因为生成器对象内部就已经实现了可迭代接口。
ES6新特性---可迭代接口、迭代器模式、生成器、生成器应用