Я нашел код в Интернете. Я раздавил исходный код в этот небольшой отрывок, который при запуске напечатает 1-20 на консоли.
var NumbersFromOne = {
*[Symbol.iterator] () {
for (let i = 1;; ++i) yield i;
}
};
var take = function* (numberToTake, iterable) {
let remaining = numberToTake;
for (let value of NumbersFromOne) {
if (remaining-- <= 0) break;
yield value;
}
}
var printToTwenty = take(20, NumbersFromOne)
console.log(...printToTwenty);
Теперь я понимаю, что take() - это функция GeneratorFunction.
Когда вызывается take(), ему присваивается итератор.
Код "... printToTwenty" использует оператор спреда для итерации через эту функцию.
Я понимаю, что NumbersFromOne является объектом. Я пришел сюда, чтобы узнать, что означает эта часть:
*[Symbol.iterator] () {}
Объявление функций генератора выполняется следующим образом: function *() {}
Поэтому я предполагаю, что это не объявление функции генератора.
* также не является именем функции
* также не может быть заменен другим оператором (/, -, +)
Что такое сделка с этим синтаксисом, и почему это * перед [Symbol.iterator]
Если после этого он не будет запущен.
Я считал, что * [Symbol.iterator]() - это способ переписать существующее свойство итератора, но тогда он не сказал бы это [Symbol.iterator].
Благодарю!