javascript - 通过函数更新全局对象变量

时间:2010-09-19 22:29:10

标签: javascript

这里有一个奇怪的问题,我正在尝试使用全局函数来更新我的设置对象,例如:

    var Settings = new Object;
    Settings.savepos = 'true';

    function UpdateSetting(obj,value){
        eval("Settings.obj = value");
        alert(Settings.savepos);
    }

obj是对象的关键,这意味着如果我用

调用该函数
UpdateSetting('savepos','false')

警报总是会让我真实,如何转换该eval或任何替代方案以便更新设置对象的键值?

4 个答案:

答案 0 :(得分:1)

您正在设置Settings.obj,而不是setting.savepos

请改为尝试:

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

答案 1 :(得分:1)

  1. 你不需要评估
  2. 你正在设置.obj,而不是.savepos(字符串没有插值)
  3. 你可能称错了。
  4. 我不确定为什么你不直接设置值(例如。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);