В книге «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)]);