目前我正在提高我的ES6技能。我正在研究迭代器/生成器语法。我有一个
的工作示例
class Library {
constructor(){
this._books = [];
}
addBook(book){
this._books.push(book);
}
get books() {
return this._books;
}
*[Symbol.iterator]() {
for(let i=0; i<this._books.length; i++) {
yield this._books[i];
}
}
}
l = new Library();
l.addBook("Book1");
l.addBook("Book2");
for(let book of l){
console.log(book);
}
一切正常。但我的第一种方法是尝试像
这样的东西*[Symbol.iterator]() {
this._books.forEach(
book => yield book
)
}
哪个(显然)不正确。除了使用for
或while
更简洁的方式进行循环之外,还有这个吗?
答案 0 :(得分:3)
我会使用yield*
:
*[Symbol.iterator]() {
yield* this._books;
}
答案 1 :(得分:2)
我认为以下是最惯用的方法。请参考trincot的答案。
*[Symbol.iterator]() {
for(let book of this._books) {
yield book;
}
}
答案 2 :(得分:1)
如果你真的通过迭代器,你也可以
[Symbol.iterator]() {
return this._books[Symbol.iterator]();
}
并且首先跳过需要生成器。