我理解我的头衔可能有点模糊,但请耐心等待。
我正在玩localStorage,所以我做了一些非常简单的事情,我可以在Firefox的控制台中搞砸。
我有以下代码:
function saved(data) {
if (localStorage.getItem(data) !== null) {
return localStorage.getItem(data);
} else {
return false;
}
}
var Player = {
canOpenDoors: false ? saved('canOpenDoors') == false : saved('canOpenDoors'),
}
Player.setAbility = function(ability, value) {
Player.ability = value;
localStorage.setItem(ability, value);
}
Player.getAbility = function(ability) {
return Player[ability];
}
console.log(Player.canOpenDoors);
此处有问题的部分是Player.ability = value
函数中的Player.setAbility
。显然,我希望它将ability
部分视为传递给函数的参数,因此如果我Player.setAbility('canOpenDoors', true)
它将Player.canOpenDoors
设置为true
。我怀疑实际发生的是它将Player.ability
设置为true
,就好像我希望能够实际成为对象的键。
我可以这样做:
Player.setAbility = function(ability, value) {
Player[ability] = value;
localStorage.setItem(ability, value);
}
但除非我被误导,否则将对象的值设置为关联数组并不是“正确的”。有没有办法可以通过点符号来做到这一点,或者我可能忽略了这一点,并且有办法专门为对象做这个?