写一个迭代器的类
迭代一个数组或者字符串,考虑要有next()方法,要有[Symbol.iterator]属性等。
class demoIterator {
constructor(param) {
this.count = 0;
this.arr = param;
this.limit = param.length;
}
next() {
if (this.count <= this.limit) {
return { done: false, value: this.param[this.count] };
} else {
return { done: true, value: undefined }
}
}
[Symbol.iterator]() {
return this;
}
}
这样的迭代器只能迭代一个实例,为了让一个可迭代对象能够创建多个迭代器,必须每创建一个迭代器就对应一个新计数器。为此, 可以把计数器变量放到闭包里,然后通过闭包返回迭代
class demoIterator {
constructor(param) {
this.arr = param;
this.limit = param.length;
}
[Symbol.iterator]() {
let count = 0,
limit = this.limit;
return {
next() {
if (count <= limit) {
return { done: false, value: this.arr[count] };
} else {
return { done: true, value: undefined };
}
}
};
}
}