这里有一个奇怪的问题,我正在尝试使用全局函数来更新我的设置对象,例如:
var Settings = new Object;
Settings.savepos = 'true';
function UpdateSetting(obj,value){
eval("Settings.obj = value");
alert(Settings.savepos);
}
obj是对象的关键,这意味着如果我用
调用该函数UpdateSetting('savepos','false')
警报总是会让我真实,如何转换该eval或任何替代方案以便更新设置对象的键值?
答案 0 :(得分:1)
您正在设置Settings.obj
,而不是setting.savepos
。
请改为尝试:
function UpdateSetting(obj,value){
Settings[obj] = value;
alert(Settings.savepos);
};
答案 1 :(得分:1)
我不确定为什么你不直接设置值(例如。Settings.savepos=false;
)
您可以将该函数附加到该对象以执行类似的操作:
var Settings = new Object;
Settings.savepos = true;
Settings.UpdateSetting = function (prop,value){this[prop] = value;}
Settings.UpdateSetting('savepos',false);
答案 2 :(得分:1)
您始终将对象的"obj"
键更改为等于value
,这可能是未定义的(或者,至少未定义为您想要的内容){{1执行它。所以,你有两个选择。首先,你可以继续使用eval()
(虽然我不推荐它,因为它比必要的更痛苦):
eval()
或者,正如许多其他人所建议的那样,您可以使用数组var Settings = new Object;
Settings.savepos = 'true';
function UpdateSetting(obj,value){
eval("Settings."+obj+" = '"+value+"'");
alert(Settings.savepos);
}
按键访问该属性:
operator[]
答案 3 :(得分:0)
您应该能够在对象上使用数组表示法。在它下面只是一个键控哈希。
尝试:
Settings[obj] = value;
我还建议按原样传递值,即string,int等:
UpdateSetting('key_name', false);