前置知识
- 生成器函数会返回一种称为Generator的迭代器
- 迭代器是一个对象,定义一个序列,并在终止时返回一个返回值
- Symbol.iterator为每一个对象定义了默认的迭代器,可以被for..of循环使用
- yield* 用于委托给另一个generator或可迭代对象
代码
// 生成器函数gen1
function* gen1() {
yield 'y1';
yield 'y2';
yield 'y3';
}
// 生成器函数gen2
function* gen2() {
yield 'x1';
yield* gen1();
yield 'x3';
}
class Test {
constructor() {
this.persons = ['azoux1', 'azoux2', 'azoux3'];
}
*[Symbol.iterator]() { // 类支持迭代器方法,因此可以添加一个默认的迭代器
// yield* this.persons.entries();
yield* gen2();
}
}
let t = new Test();
for (let item of t) {
console.log(item); // 输出: x1 y1 y2 y3 x3
}