Массивоподобный объект: назначить функцию итератора по умолчанию для прототипа объекта - PullRequest
0 голосов
/ 28 апреля 2019

Рассмотрим эту простую однострочную генераторную функцию, определенную для 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 без явного вызова генератора, как в массиве:

for (const [ k, v ] of object);

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 28 апреля 2019

Установить генератор на 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 голосов
/ 28 апреля 2019
   Object.prototoype[Symbol.iterator] = function* pairs() {
     //...
   };

Но имейте в виду, что это может вызвать побочные эффекты повсюду. Это не должно использоваться в производстве (или, по крайней мере, на ваш страх и риск;)).

0 голосов
/ 28 апреля 2019

в ES6 вы можете использовать Symbol.iterator для определения пользовательского итератора для прототипа.Смотри здесь

...