间接访问变量
Accessing variables indirectly
在我的代码(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")};
现在,如何实现此功能来执行我想要的操作?
问题是您正在尝试访问带有点表示法和变量的属性。
myApp.aName.value;
这有时会创建新属性或返回undefined
您应该改用此表示法
myApp[aName];
您可以使用
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]
。
您可以通过窗口变量访问 gloval 变量。例:
var foo = 'asdf';
alert(window['foo']);
要获取 json 变量,请使用相同的表示法:
var myApp = {
var1: true,
var2: false,
var3: true,
var4: false
};
function varGetter(name) {
return myApp[name];
}
编辑:误读问题。
如果你想做的是封装(保持变量私有),你应该使用模块模式,它会给你:
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
};
})()
相关文章:
- 如何从字符串变量访问对象属性
- 无法使用变量访问数据 JSON
- D3:使用变量访问绑定数组中的对象
- JavaScript 变量访问错误
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 如何使用javascript数据对象?如何通过变量访问条目
- 如何使用变量访问对象属性
- 使用变量访问对象的属性
- 如何使用包含对象键名的变量访问对象属性
- 为什么通过缓存变量访问 DOM 更快
- 将 PHP 变量访问到外部 JavaScript 文件中
- 使用变量访问 Javascript 中的对象信息
- 使用变量访问 JSON 属性(字符串)
- 如何在 yii 中从 javascript 变量访问文本字段输入
- 如何使用 javascript 变量访问模型属性
- 根据 HighCharts 对象的变量访问数组的元素
- 使用动态变量访问 Meteor 中另一个变量的值
- 如何通过绑定的控制器变量访问服务的属性
- Angular JS工厂和变量访问
- 使用变量访问对象的值