如果某个方法之前加上星号( * ),就表示该方法是一个 Generator 函数。
class Foo {
constructor(...args) {
this.args = args;
}
*[Symbol.iterator]() {
for(let arg of this.args) {
yield arg;
}
}
}
for(let x of new Foo('hello', 'world')) {
console.log(x);
}
// hello
// world
上面代码中, Foo 类的 Symbol.iterator 方法前有一个星号, 表示该方法是一个 Generator 函数。 Symbol.iterator 方法返回一个 Foo 类的默认遍历器,for...of 循环会自动调用这个遍历器。