我基于以下代码构建了我的代码:
https://github.com/davidflanagan/jstdg7/blob/master/ch12/Range.js
class SayHi {
constructor (hi, repeat) {
this.hi = hi;
this.repeat = repeat;
}
[Symbol.iterator]() {
let next = 1;
let last = this.repeat;
let hi = this.hi;
return {
next() {
if (next<=last) {
let now = next;
next++;
return { value: hi+now };
}
else {
return { done: true };
}
},
// What's the use of this??
[Symbol.iterator]() {
return this;
}
};
}
}
let sayHi = new SayHi("HI", 3);
for(let x of sayHi) console.log(x);
从整个程序的上下文来看,我不明白这行代码是如何工作的,因为程序在没有以下代码的情况下工作:
[Symbol.iterator]() { return this; }
它是如何工作的?为什么要为外部Symbol.iterator返回2个函数?我们如何调用每个函数?
这是一个相对简单的概念,是我最近自学的。如果你有一个普通的迭代器对象,它在没有[Symbol.iterator]
的情况下rsturn一个对象,那么这将抛出一个错误:
let data = [...iterator];
有了这一行,程序不仅不会抛出错误,而且这两种方法生成完全相同的东西:
let data1 = [...sayHiInstance];
let data2 = [...sayHiInstance[Symbol.iterator]()];