For-of循环:在对象原型上分配默认迭代器

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

考虑在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);

有什么想法吗?

javascript iterator prototype generator for-of-loop
3个回答
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
投票
   Object.prototoype[Symbol.iterator] = function* pairs() {
     //...
   };

但是请注意,这可能会在所有地方引起副作用。不应在生产中使用此功能(或至少由您自担风险;))。


0
投票

在ES6中,您可以使用Symbol.iterator定义原型的自定义迭代器。参见here

© www.soinside.com 2019 - 2024. All rights reserved.