在我的代码(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")};
现在,如何实现此功能以实现我想要的目标?
答案 0 :(得分: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]
。
答案 1 :(得分:1)
问题是您尝试使用点表示法和变量访问属性。
myApp.aName.value;
这有时会创建新属性或返回undefined
您应该使用此表示法
myApp[aName];
答案 2 :(得分:0)
您可以通过窗口变量访问全局变量。 例如:
var foo = 'asdf';
alert(window['foo']);
要获取json变量,请使用相同的表示法:
var myApp = {
var1: true,
var2: false,
var3: true,
var4: false
};
function varGetter(name) {
return myApp[name];
}
编辑:误读了这个问题。
答案 3 :(得分: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
};
})()