let range = {
from: 1,
to: 5,
[Symbol.iterator]() {
this.current = this.from;
return this;
},
next() {
if (this.current <= this.to) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
for (let num of range) {
alert(num); // 1, затем 2, 3, 4, 5
}
this
): [Symbol.iterator]() {
this.current = this.from;
return this;
},
Для того, чтобы объект был итерируемым, в нем должен быть реализован метод@@iterator
, т.е. этот объект (или любой из объектов из его prototype chain) должен иметь свойство с именемSymbol.iterator
:
Свойство:[Symbol.iterator]
Значение: Функция без аргументов, возвращающая объект, соответствующий iterator protocol.
{ next() { /* ... */ }}
, или, как в вашем примере, метод next()
определён на самом объекте, поэтому возвращается this
.