#javascript
#javascript
Вопрос:
Приведенный ниже код работает не так, как я хочу. Я думаю, что проблема, вероятно, связана с небезопасной ссылкой.
var values = { "key1": "val1", "key2": "val2" };
const properties = {};
for (key in values) {
properties[key] = {
get: () => values[key],
set: (val) => {
values[key] = val
}
};
}
console.log(properties["key1"].get()); // Result should be val1 but it prints val2
Как я могу запустить приведенный выше код, как я хочу?
Комментарии:
1.
key
в настоящее время является глобальным, поэтому приget: () => values[key]
выполнении key всегда будет последним ключом от объекта… попробуйтеfor ( let key in values )
2. 1. Не используйте неявные глобальные переменные. 2. Рассмотрите возможность использования линтера, такого как ESLint, который избавит вас от распространенных ошибок, подобных этой.
Ответ №1:
var values = { "key1": "val1", "key2": "val2" };
const properties = {};
for (const key in values) {
properties[key] = {
get: () => values[key],
set: (val) => {
values[key] = val
}
};
}
console.log(properties["key1"].get());
согласно Jaromanda X, описанному в комментарии, переменная key
инициируется как глобальная переменная, а глобальная переменная содержит последнюю запись объекта, поэтому попробуйте сделать key
ее переменной цикла for, поэтому для каждой итерации цикла for она содержит значение key
как локальная переменная, пожалуйстапроверьте приведенный выше фрагмент