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)是非常糟糕的做法 - 如果可能的话,最好找到另一种方法来完成您想要完成的任何事情。
您可以将Generatorfor 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)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |