Open HuangHongRui opened 7 years ago
class MyClass {
*createIterator() {
yield 1;
yield 2;
yield 3;
}
}
let instance = new MyClass();
let iterator = instance.createIterator();
创建一个名为 MyClass 的类, 它有一个生成器方法createIterator()..返回值为一个硬编码在生成器中的迭代器.
如果使用类来表示值的集合..那为它定义一个默认迭代器会更有用.. 可通过 Symbol.iterator 定义生成器方法即可为类定义默认迭代器..
class Collection {
constructor() {
this.items = [ ]
}
*[Symbol.iterator]() {
yield *this.items.values();
}
}
var collection = new Collection()
collection.items.push(1);
collection.items.push(2);
collection.items.push(3);
for ( let x of collection.items ) {
console.log( x );
}
// 1 // 2 // 3
这例子 用可计算名称 创建了一个代理 this.items
数组 value()
迭代器的生成器方法..
任务管理一系列值的类 都应该引入 默认迭代器..
因为一些与特定集合有关的操作 需要所操作的集合含有一个迭代器..
现在可以将 Collection 的实例直接用于 for-of
循环中或用展开运算符操作它.
如果不介意在对象的实例中出现添加的方法和访问器属性.. 则可以将它们添加到类的原型中.. 如果希望只出现在类中..那需要使用静态成员..
在对象字面量中, 可以通过在方法名前面附加 ( * ) 的方式来定义生成器. 在类中, 也是如此, 可以将任何方法定义成生成器..