Что происходит на этих строчках?

Есть код:
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;
  },


Объясните, пожалуйста...
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ответы на вопрос 2
@microbot
Ссылка на статью из учебника, где можете про это прочитать.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
поцитирую документацию:
Для того, чтобы объект был итерируемым, в нем должен быть реализован метод @@iterator, т.е. этот объект (или любой из объектов из его prototype chain) должен иметь свойство с именем Symbol.iterator:
Свойство: [Symbol.iterator]
Значение: Функция без аргументов, возвращающая объект, соответствующий iterator protocol.


Метод может вернуть объект типа { next() { /* ... */ }}, или, как в вашем примере, метод next() определён на самом объекте, поэтому возвращается this.

Подробно именно ваш пример расписан на learn.javascript
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы