For-of循环默认迭代器功能

问题描述 投票:-1回答:3

考虑在Object.prototype上定义的这个简单的生成器函数:

Object.prototype.defineProperty(Object.prototype, 'pairs', {
    enumerable: false,
    * value( ) {
        for (const key in this)
            yield [ key, this[key] ];
} });

当然可以这样使用:

const object = { goats_teleported: 42 };

for (const [ key, value ] of object.pairs());

但是我想知道是否有任何方法可以将pairs函数分配给对象原型,因此它将在for-of循环中自动触发而无需显式调用;就像这样:

for (const [ key, value ] of object);

有什么想法吗?

javascript iterator prototype generator for-of-loop
3个回答
2
投票
将生成器置于Object.prototype[Symbol.iterator]


2
投票
Object.prototoype[Symbol.iterator] = function* pairs() { //... };

1
投票
在ES6中,您可以使用Symbol.iterator定义原型的自定义迭代器。参见here
© www.soinside.com 2019 - 2024. All rights reserved.