1

在我的代码(Firefox 扩展中的 javascript)中,我有一些变量的列表,如下所示:

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false
};

我想访问这些变量以使用函数间接获取它们的值:

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false,

 varGetter: function(aName) {
  // code
  return myApp.aName.value;
 }
};

我这样称呼这个函数,例如:

if(myApp.varGetter("var2")) {alert("true")};

现在,如何实现这个功能来做我想要的?

4

4 回答 4

1

您可以使用myApp[aName]变量作为属性名称:

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false,

 varGetter: function(aName) {
  return myApp[aName];
 }
};

console.log(myApp.varGetter("var1")); // true

此外,为避免myApp在函数中进行硬编码,您可以将其替换为this[aName].

于 2014-12-24T00:06:40.677 回答
1

问题是您正在尝试使用点符号和变量访问属性。

myApp.aName.value;

这有时会产生新的财产或回报undefined

您应该改用此表示法

myApp[aName];
于 2014-12-24T00:17:28.390 回答
0

您可以通过 window 变量访问 gloval 变量。例子:

var foo = 'asdf';
alert(window['foo']);

要获取 json 变量,请使用相同的符号:

var myApp = {
 var1: true,
 var2: false,
 var3: true,
 var4: false
};

function varGetter(name) {
    return myApp[name];
}

编辑:误读了这个问题。

于 2014-12-24T00:08:25.413 回答
0

如果你想做的是封装(保持变量私有),你应该使用模块模式,它会给你:

var myApp = (function(){
    //you can't access those variable doing myApp.var1 for example
    var data = {};
    data.var1 = true;
    data.var2 = false;
    data.var3 = true;
    data.var4 = false;

    //then explicitly make your getter/setter
    function varGetter(varName){
        return data[varName];
    }

    //finally, return an object into myApp, out of this closure
    return {
        varGetter : varGetter
    };
})()
于 2014-12-24T00:12:50.460 回答