网上看到这东西,完全不懂什么意思,而且也报错了,请教大神指导
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) {
// 1
// 2
// 3
console.log(x);
}
for (let x of collection) {}
等价于
for (let x of collection[Symbol.iterator]()) {}
效果:遍历迭代器。
Collection类中
而执行生成器函数会返回一个迭代器。
iter = collection[Symbol.iterator]();
for (let x of collection[Symbol.iterator]()) {}
等价于
for (let x of iter) {}
来看
iter
这个迭代器*[Symbol.iterator]() {}
生成器函数内yield *表达式
执行了this.items.values
方法,返回1个迭代器,每次遍历该迭代器返回数组每一项的值。(Array.prototype.values() 方法 chrome未实现所以报错)那么:
for (let x of iter) {}
等价于
for (let x of collection.items) {}
不大好讲。。感觉至少得先了解迭代器和生成器的概念。。。
贴个参考链接吧