@zlodiak

Равноценны ли эти итераторы?

Есть 2 итерируемых объекта: строка и кастомный. В кастомном сначала вызывается метод iter(), а затем несколько раз вызывается метод next(). в результате выводятся все элементы кастомного итерируемого объекта:

class Obj {
  constructor(word) {
    this.word = word;
  }

  iter() { return new Iterator(this.word); }
}


class Iterator {
  constructor(word) {
    this.word = word;
    this.index = 0;
  }

  next() {
    try {
      let letter = this.word[this.index];
      this.index += 1;
      return letter;
    } catch (err) {
      throw "StopIteration";
    }
  }

  iter() { return this; }
}

const obj = new Obj('sergey');
it = obj.iter();

console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next());


Скажите, прав ли я в том, что в случае не кастомного итерируемого объекта (строки) происходит такая же последовательность операций, но неявно. То есть строка, попадая в контекст цикла for of при помощи метода iter() (название может отличаться, не в этом суть) возвращает итератор. И затем цикл при каждом проходе неявно пинает метод next(). В результате выводятся все элементы итерируемого объекта:

const s = 'sergey';

for (let char of s) {
  console.log(char);
}


При этом строка имеет метод iter() (название может отличаться) от родительского объекта.
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы