的JavaScript - 通过功能更新全局对象变量
奇怪的问题在这里,我试图用一个全局函数来更新我的设置对象,例如:的JavaScript - 通过功能更新全局对象变量
var Settings = new Object;
Settings.savepos = 'true';
function UpdateSetting(obj,value){
eval("Settings.obj = value");
alert(Settings.savepos);
}
的obj是对象,意义的关键如果我叫与
UpdateSetting('savepos','false')
功能警报将永远只给我真实的,我怎么转换是EVAL或任何替代,因此将更新设置对象与价值的关键?
您应该可以在对象上使用数组表示法。在它下面只是一个键控散列。
尝试:
Settings[obj] = value;
我也建议值传递,因为他们,即字符串,整数,等:
UpdateSetting('key_name', false);
要设置Settings.obj
,不setting.savepos
。
试试这个:
function UpdateSetting(obj,value){
Settings[obj] = value;
alert(Settings.savepos);
};
- 你不需要一个eval
- 你设置OBJ,不.savepos(没有为字符串无插值)
- 你可能称它错了。
我不完全确定你为什么不直接设置值(例如,Settings.savepos=false;
)。
您可以将功能附加到对象做同样的事情:
var Settings = new Object;
Settings.savepos = true;
Settings.UpdateSetting = function (prop,value){this[prop] = value;}
Settings.UpdateSetting('savepos',false);
那真是太美了!谢谢! – Joe 2010-09-20 01:37:07
如果你有多个'Settings'对象,那么你应该考虑使用'prototype'方法(google:'javascript prototype method')。搜索它有点难,因为还有一个“原型”JavaScript框架。很高兴这有助于:) – vol7ron 2010-09-20 02:31:36
我想指出,我仍然鼓励直接设置值,例如'var prop ='savepos';设置[prop] = true;',但我也知道人们有理由问这个问题,并希望以某种方式完成这个问题。 – vol7ron 2010-09-20 02:33:26
你总是改变对象的"obj"
关键等于value
,这很可能是不确定的(或者,至少,没有定义到你想要的)上下文eval()
执行它。所以,你有两个选择。首先,您可以继续使用eval()
(虽然我不建议这样做,因为它比必要更多的痛苦):
var Settings = new Object;
Settings.savepos = 'true';
function UpdateSetting(obj,value){
eval("Settings."+obj+" = '"+value+"'");
alert(Settings.savepos);
}
或者,正如许多其他建议,你可以使用数组operator[]
通过键来访问属性:
var Settings = new Object;
Settings.savepos = 'true';
function UpdateSetting(obj,value){
Settings[obj] = value;
alert(Settings.savepos);
}
我相信技术定义是下标符号 – 2010-09-19 22:40:43
帮助,谢谢! – Joe 2010-09-19 22:46:59
@Russ,谢谢你的语义。 – 2010-09-20 00:25:42