@artbutko
Web Developer

Почему итератор нужно делать итерируемым?

В книге «JavaScript. Полное руководство» за авторством Д. Флэнагана приведена реализация итератора на примере числового класса Range.
Вопрос:
зачем для удобства сам итератор нужно делать итерируемым?

class Range {
  constructor(from, to) {
      this.from = from;
      this.to = to;
  }
  
  [Symbol.iterator] () {
      let next = Math.ceil(this.from);
      let last = this.to;
      
      return {
          next() {
              return (next <= last)
                  ? { value: next++ }
                  : { done: true };
          },
          // Для удобства мы делаем сам итератор итерируемым.
          [Symbol.iterator]() { return this; }
      }
  }
}

for (let x of new Range(1, 10)) console.log(x);
console.log([...new Range(-2, 2)]);
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Посмотрите на результат выполнения следующего кода с [Symbol.iterator]() { return this; } и без:

const iter = new Range(1, 5)[Symbol.iterator]();
console.log(iter.next().value);
console.log(iter.next().value);
console.log([...iter]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы