JavaScript - 在 [Symbol.iterator]() 中给出返回 [Symbol.iterator]() 的选择有什么用?



我基于以下代码构建了我的代码:

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]()];

相关内容

最新更新