使用字符串访问javascript中的变量
如果我有:使用字符串访问javascript中的变量,javascript,variables,Javascript,Variables,如果我有: name.sub = function() { var sub = {}; var placeholder = "test" var test = function() { return 42; }; // Desired code would be here return sub; }; 我想使用一个占位符来访问变量,以便得到42 差不多 window[“name”][“sub”][占位符]似乎在寻找name.s
name.sub = function() {
var sub = {};
var placeholder = "test"
var test = function() {
return 42;
};
// Desired code would be here
return sub;
};
我想使用一个占位符
来访问变量,以便得到42
差不多
window[“name”][“sub”][占位符]
似乎在寻找name.sub.test
我找到的唯一答案是它是否是一个全局变量。
使用eval是可行的,但我听说应该尽可能避免使用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
我不确定这是否是你想要的,但希望是。详细说明?您不能像访问全局范围内的
窗口的属性那样访问函数中的局部变量
写了一篇关于的有趣文章,其中包括对激活对象是什么的解释,我认为这就是您正在寻找的对象。
我建议你通读整篇文章,但长话短说:
在函数内部,声明的变量(和函数)作为属性添加到当前作用域的激活对象中,因为它们被添加到全局作用域的窗口中。
但与窗口不同
:
请注意,激活对象是一种内部机制,程序代码永远无法真正访问它
结论:你所问的(目前)是不可能的
placeholder = "test";
console.log(eval(placeholder + '()'))
// Would return 42
您的选择仅限于:
使用中间对象:
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;
};
使用窗口
,从测试
的声明中删除变量
:
name.sub = function() {
var sub = {};
var placeholder = "test";
test = function() {
return 42;
};
console.log(window[placeholder]());
return sub;
};
我建议第一个选择是为了性能优于<代码> EVA/code >,以兼容<代码>窗口
(可能与其他代码冲突),仅仅是因为个人品味和我认为良好的实践。 < P>通过我对您的问题的理解,
看起来您正在寻找JavaScript对象文本的键/值对
window.name是保留的,顺便说一句:
加上
Using dot notation:
sub.test3 = "value3";
Using square bracket notation:
sub["test4"] = "value4";
也许我觉得很简单,但似乎这就是你要找的你试过窗口[“名称”][“子”][窗口[“名称”][“子”][“占位符”]]]()
?我不太明白这个目的。您不能访问函数外部函数的本地“占位符”。您必须在函数外部定义占位符,或将占位符添加为返回对象的属性;在保持上下文的同时,我可能在将问题抽象化方面做得很差。将有一个name.sub.input(variable)
,其中input
将variable
转换为字符串(例如“test”
)。我想知道变量test
等于什么。希望这能让事情变得明朗一点。尽管我认为我为什么要这样做是个白痴。我能问一个半跟进的问题吗,因为也许我问错了。我正在尝试做一个gui,在这里单击一个项目,然后该项目将运行一个函数。因此,我在项中有一个属性,该属性具有单击时应运行的函数的名称。所以基本上我想在画布上创建一个onClick函数,如果这有意义的话。上面的这个实现仍然相关吗?我不给该项分配属性,而是给它分配函数本身——如果它是DOM元素,则通过addEventListener
,否则通过属性。但是关于你具体情况的细节,我建议你问一个新问题。谢谢,但我试着让一切都在功能范围内。基本上是基于字符串的值动态调用函数。