的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); 
+0

我相信技术定义是下标符号 – 2010-09-19 22:40:43

+0

帮助,谢谢! – Joe 2010-09-19 22:46:59

+0

@Russ,谢谢你的语义。 – 2010-09-20 00:25:42

要设置Settings.obj,不setting.savepos

试试这个:

function UpdateSetting(obj,value){ 
    Settings[obj] = value; 
    alert(Settings.savepos); 
}; 

  1. 你不需要一个eval
  2. 你设置OBJ,不.savepos(没有为字符串无插值)
  3. 你可能称它错了。

我不完全确定你为什么不直接设置值(例如,Settings.savepos=false;)。
您可以将功能附加到对象做同样的事情:

var Settings   = new Object; 
Settings.savepos  = true; 
Settings.UpdateSetting = function (prop,value){this[prop] = value;} 

Settings.UpdateSetting('savepos',false); 
+0

那真是太美了!谢谢! – Joe 2010-09-20 01:37:07

+0

如果你有多个'Settings'对象,那么你应该考虑使用'prototype'方法(google:'javascript prototype method')。搜索它有点难,因为还有一个“原型”JavaScript框架。很高兴这有助于:) – vol7ron 2010-09-20 02:31:36

+0

我想指出,我仍然鼓励直接设置值,例如'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); 
}