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

Есть код:
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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 22:44
500 руб./в час
30 апр. 2024, в 21:45
20000 руб./за проект
30 апр. 2024, в 21:36
1500 руб./в час