[英]Use string to access variable in javascript
如果我有:
name.sub = function() {
var sub = {};
var placeholder = "test"
var test = function() {
return 42;
};
// Desired code would be here
return sub;
};
我想使用一个placeholder
来访问变量,以便得到42
。
像window["name"]["sub"][placeholder]
的东西似乎正在寻找name.sub.test。
我发现的唯一答案是它是否是全局变量。 使用eval可以工作,但我听说应该尽可能避免使用它。
placeholder = "test";
console.log(eval(placeholder + '()'))
// Would return 42
我的实际最终目标是拥有一个关联数组,其中:
console.log(array[placeholder]);
// Would return 42
任何帮助,将不胜感激。
这是我最终对感兴趣的任何人使用的:
name.sub= function() {
var sub = {};
var placeholder = "test"
var test = function() {
return 42;
var newObj = {};
newObj["test"] = function() {test()}
console.log(newObj[placeholder]())
// Should return 42
};
您不能从所述函数外部访问函数内部的变量。
相反,您可以这样做:
name.sub = function(placeholder) {
var functions = {
"test": function() {
return 42;
},
};
return functions[placeholder]();
};
name.sub("test"); // 42
我不确定这是否是您要找的东西,但希望如此。 解释更多?
您不能以与访问全局范围内的window
属性相同的方式访问函数内部的局部变量。
kangax写了一篇有趣的文章[了解JavaScript中的delete] ,其中包括对什么是激活对象的解释-我认为这是您正在寻找的对象。
我建议您阅读全文,但长话短说:
在函数内部,声明的变量(和函数)作为属性添加到当前范围的激活对象中,因为它们被添加到全局范围的window
中。
但是与window
不同:
请注意,激活对象是一种内部机制,程序代码永远无法真正访问它。
结论:您要的(当前)不可能。
您的选择仅限于:
使用中间对象:
name.sub = function() { var sub = {}; var placeholder = "test"; var array = {}; array.test = function() { return 42; }; console.log(array[placeholder]()); return sub; };
使用eval,完全像您建议的那样:
name.sub = function() { var sub = {}; var placeholder = "test"; var test = function() { return 42; }; console.log(eval(placeholder + '()')); return sub; };
通过使用window
,通过从test
的声明中删除var
:
name.sub = function() { var sub = {}; var placeholder = "test"; test = function() { return 42; }; console.log(window[placeholder]()); return sub; };
我建议使用第一个选项,是因为eval
更好的性能,与window
兼容性(可能与其他代码冲突),并且仅仅是出于个人喜好和我认为的良好做法。
根据我对您的问题的了解,
似乎您正在寻找JavaScript对象文字的键/值对,
保留window.name,顺便说一句: https : //developer.mozilla.org/zh-CN/docs/Web/API/Window/name
var sub = {
'test': function() {
return 42;
},
'test2': 42;
}
sub['test']();
sub['test2'];
加上
Using dot notation:
sub.test3 = "value3";
Using square bracket notation:
sub["test4"] = "value4";
也许我在想简单,但似乎这就是您想要的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.