@konst34

Что происходит под капотом?

Перерыл весь гугл и видосы на ютубе, но так и не понял. Уже 2 дня на одном месте сижу, терпение лопается...
Код взят c learn.javascript, но там это не объясняется.
Пожалуйста, объясните, что именно здесь происходит? Первая версия кода с learn.js
let str = "Hello";

let iterator = str[Symbol.iterator]();

while (true) {
  let result = iterator.next();
  if (result.done) break;
  alert(result.value); // выводит символы один за другим
}

И вторая, моя которую я пытаюсь понять изнутри, но оно не работает... Что именно не так? (Мне кажется, что все не "так"...)
let str = "Hello";


let iterator = str[Symbol.iterator] = function()  {
    let i = 0;
    return {
    next() {
    return (i < this.length) ? ({ value: this[i++] }) : ({ done: true })
           }   
           }
        };

while (true) {
  let result = iterator.next();
  if (result.done) break;
  alert(result.value);
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Прежде чем лезть в тонкости стоит изучить основы языка и основы дебага.

В частности, в вашей версии вы так и не вызвали str[Symbol.iterator](). Так что непонятно по чему вы пытаетесь итерироваться.

Но даже если вы это сделаете, вы возвращаете объект
{
  next() { ... }
}

в котором внутри функции next используете ключевое слово this. Но при вызове iterator.next() этот this будет указывать на объект iterator у которого нет никакого свойства length.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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