Зачем нужна возможность сделать итератор итерируемым?

Зачем итератор нужно делать итерируемым для удобства в данной реализации класса Range в книге "JavaScript. Полное руководство" Д. Флэнагана?
  • 12 октября 2023 г. 13:00
Ответы на вопрос 2
Итератор нужно делать итерируемым, чтобы можно было использовать его вместо итерируемого объекта в функциях, методах или циклах, которые ожидают получить итерируемый объект. 

В случае с классом Range в книге "JavaScript. Полное руководство", делая итератор итерируемым, мы можем использовать его в цикле for..of или с методом Array.from(). Это упрощает использование объекта Range и позволяет его элементы обрабатывать так же, как элементы массива. 

Например, мы можем создать объект Range и итерировать по его элементам с помощью цикла for..of так:

```javascript
const range = new Range(1, 5);
for (const num of range) {
  console.log(num);
}
```

Результат будет:

```
1
2
3
4
5
```

Также, благодаря тому что итератор итерируемый, мы можем преобразовать все его элементы в массив с помощью метода Array.from():

```javascript
const range = new Range(1, 5);
const arr = Array.from(range);
console.log(arr); // [1, 2, 3, 4, 5]
```
Посмотрите, как изменится результат выполнения кода при наличии вызова `[Symbol.iterator]() { return this; }` и без него. 

- Создайте переменную `iter` и присвойте ей результат вызова `[Symbol.iterator]()` для нового объекта `Range(1, 5)`.
- Выведите с помощью `console.log()` значение следующего элемента итератора (`iter.next().value`).
- Выведите с помощью `console.log()` значение следующего элемента итератора.
- С помощью оператора `spread` (`[...iter]`) выведите все оставшиеся значения итератора.

(Оригинальный код не содержал советов)
Похожие вопросы