考虑在Object.prototype
上定义的这个简单的单行生成器函数:
* pairs() { for (const key in this) yield [ key, this[k] ]; };
它可以这样使用:
const object = { goats_teleported: 42 };
for (const [ k, v ] of object.pairs());
我想知道是否有任何方法可以将pairs
函数分配给对象原型,因此它将在for-of循环中自动触发,而无需显式的生成器调用,类似于数组:
for (const [ k, v ] of object);
有什么想法吗?
答案 0 :(得分:2)
Object.prototoype[Symbol.iterator] = function* pairs() {
//...
};
但是请注意,这可能会在所有地方引起副作用。不应在生产中使用此功能(或至少由您自己承担风险;))。
答案 1 :(得分:2)
将生成器放在Object.prototype[Symbol.iterator]
上:
Object.prototype[Symbol.iterator] = function* pairs() {
for (const key in this) yield [ key, this[key] ];
};
const object = { goats_teleported: 42, foo: 'fooval' };
for (const [ k, v ] of object) {
console.log(k, v);
}
答案 2 :(得分:0)
在ES6中,您可以使用Symbol.iterator
为原型定义自定义迭代器。
参见here