我试图通过创建一个Range函数来理解JavaScript中的迭代器,但它不起作用
我正在try 理解JavaScript中的可迭代变量,因此我创建了一个Range函数,当我调用它时,它将为我返回一系列数字,例如:
for (let i of Range(5)) console.log(i);
0
1
2
3
4
以下是执行此操作的代码.
// log function
const log = console.log;
// Range constructor
function Range(end, start, step = 1) {
if (!new.target) {
return new Range(start, end, step);
}
end = start ? start : end;
start = start ? end : 0;
step = step;
return {
start,
end,
step,
[Symbol.iterator]() {
return this;
},
next() {
if (this.start < this.end) {
this.start += this.step;
return {
done: false,
value: this.start - this.step
};
} else {
return { done: true };
}
}
}
}
但当我运行它时,会一个接一个地返回数字.
let range = new Range(6);
for (i of range) log(i);
输出
0
1
2
3
4
5
但是当我以for (let i of Range(5) log(i);
的速度运行它时,它返回undefined
为什么!
如果通过将return new Range(start, end, step);
更新为return new Range(end, start, step);
并将end = start ? start : end;
更新为end = start ?? end;
来修复问题,则为update
所以当我跑的时候
let range = new Range(5);
for (let i of range) log( i ); // 0, 1, 2, 3, 4
for (let i of Range(10) ) log( i ); // 0, 1, 2, 3, 4
但一个新的问题出现了
let arr = Array.from(range);
log(arr) // []
如何修复它?