Вот как вы можете создать пользовательскую функцию для возврата итератора по умолчанию для объекта (перезаписав его по умолчанию) и посмотреть, как он вызывается:
объект реализовал итеративный интерфейс, он должен реализовать[Symbol.iterator]
ключ, который указывает на функцию, которая возвращаетiterator
, Мне интересно, еслиfor..of
Цикл внутренне вызывает этот метод на объекте, чтобы получить этоiterator
?
Мне интересно, что, например,Map
определяет интерфейс с несколькими итераторами (записями, значениями, ключами), и кажется, что если не указано явно,for..of
цикл использует итератор, возвращаемыйmap.entries()
вызов.
Я пытаюсь найтив спецификации но это только указывает, чтоiterator
передается в качестве параметра абстрактной операцииForOf
:
Абстрактная операция ForIn / OfBodyEvaluation вызывается с аргументами lhs, stmt,итератор, iterationKind, lhsKind и labelSet.
Итак, в основном два вопроса:
Как итератор получается из объекта?Где это указано в спецификации?