如果我有:
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
};
答案 0 :(得分:1)
您无法从函数外部访问函数内的变量。
相反,你可以这样做:
name.sub = function(placeholder) {
var functions = {
"test": function() {
return 42;
},
};
return functions[placeholder]();
};
name.sub("test"); // 42
我不确定这是不是你正在寻找的东西,但希望它是。解释更多?
答案 1 :(得分:0)
您无法访问函数内的局部变量,就像访问全局范围内window
的属性一样。
kangax撰写了一篇关于Understanding delete [in JavaScript]的有趣文章,其中包含对激活对象的解释 - 我认为这就是您正在寻找的内容。
>
我建议你阅读整篇文章,但长话短说:
内部函数,声明的变量(和函数)作为属性添加到当前作用域的激活对象,因为它们被添加到全局作用域中的window
。
但不像window
:
请注意,Activation对象是一种内部机制,程序代码永远无法访问它。
结论:你所要求的不是(目前)可能。
您的选择仅限于:
使用中间对象:
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
,从var
的声明中删除test
:
name.sub = function() {
var sub = {};
var placeholder = "test";
test = function() {
return 42;
};
console.log(window[placeholder]());
return sub;
};
我建议第一个选项是为了超过eval
的性能,与window
的兼容性(可能会与其他代码冲突),仅仅是因为个人品味和我认为的良好做法。< / p>
答案 2 :(得分:0)
根据我对你的问题的理解,
看起来你正在寻找一个JavaScript对象文字的键/值对,
window.name保留为btw:https://developer.mozilla.org/en-US/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";
也许我想简单,但似乎这就是你要找的东西