Ant*_*ier 2 javascript iterator for-loop prototype
最近,我了解了JS迭代器,它在for( of )
循环中使用。由于在JS中甚至原始函数都具有原型,因此我想知道是否可以扩展Number原型,从而使以下内容成为有效的表达式:
for(let i of 10) console.log(i); //0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
显然,这仅适用于整数,但是有没有办法实现呢?
希望有,但是由于我是JS的这一部分的新手,所以我无法自己创建它。
当然,只需定义Number.prototype[Symbol.iterator]
:
Number.prototype[Symbol.iterator] = function() {
let currentNum = 0;
return {
next: () => (
currentNum == this
? { done: true }
: {
value: currentNum++,
done: false
}
)
}
}
for (const i of 10) console.log(i);
Run Code Online (Sandbox Code Playgroud)
但是改变内置对象(如 global Number
)是非常糟糕的做法 - 如果可能的话,最好找到另一种方法来完成您想要完成的任何事情。
您可以将Generator
for Symbol.iterator
作为原型Number
。
Number.prototype[Symbol.iterator] = function* () {
for (var i = 0; i < this; i++) {
yield i;
}
};
console.log([...10]);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)