if(input === 'complete') {
val === 'true' ? val = true : val = false
data[input] = val
} else {
data[input] = val
}
...
) работает не с массивом, а с итератором по этому массиву. Мы добавляем нашему классу итератор, путём присваивания специальному полю [Symbol.iterator]
функции, которая запускает итератор напрямую из такого же поля нашего массива this.store
. Само собой оно нужно. Разве что можно получить тот же самый итератор из массива неявно так: [Symbol.iterator] = () => this.store.values()
, но под капотом конкретно для массива там происходит то же самое. * [Symbol.iterator]() {
for (const value of this.store) {
yield value;
}
}
// или совсем уж руками:
[Symbol.iterator]() {
const values = this.store;
let index = 0;
return {
next() {
if (index < values.length) {
return {
value: values[index++],
done: false
};
}
return {
done: true
};
}
};
}
let worker = {
someMethod() {
return 1;
},
slow(x) {
alert("Called with " + x);
return x * this.someMethod(); // (*)
}
};
let worker = {
someMethod: function someMethod() {
return 1;
},
slow: function slow(x) {
alert("Called with " + x);
return x * this.someMethod(); // (*)
}
};
const todos = useContext(TodoContext);
const [localTodos, setLocalTodos] = useState(todos);
useEffect(() => setLocalTodos(todos), [todos]);