Это действительно странное использование Symbol.iterator
, обычно вы не должны указывать им параметры. Вы можете разделить его на
const generatorFunction = numbers[Symbol.iterator];
const iterator = generatorFunction({
start: 6,
stop: 30,
step: 4
});
const array = [...iterator];
console.log(`My lucky numbers are: ${array}`);
. Обратите внимание, что iterator
является итеративным, он наследует метод [Symbol.iterator]
, возвращающий сам себя, что позволяет использовать его в элементе распространения массива. То, что метод генератора (который здесь вызывается явно) также имеет имя [Symbol.iterator]
, не имеет значения, это только приводит к путанице. Лучше написать это в стиле
const numbers = {
*range(start, stop, step=1) {
for(let x = start; x <= stop; x+=step) {
yield x;
}
},
[Symbol.iterator]() {
return this.range(0, 100);
},
};
console.log([...numbers.range(6, 30, 4)]);