使用字符串值作为函数的名称被称为
问题描述:
我希望能够做这样的事情:使用字符串值作为函数的名称被称为
var MyObject = function(prop) {
this.property = prop;
};
var stringVar = 'MyObject';
var myObject = new stringVar(1); // This doesn't work.
assertTrue(myObject.property === 1);
我知道,这将工作:
var myObject = new window[stringVar](1);
,但我想知道是否有一种更加情境化的方式来完成它。
作为一个方面说明:我显然试图避免使用eval()
。
答
这是Javascript中的一个已知限制。没有办法通过字符串以上下文中立的方式来引用函数。你有什么是你所能做的。
所以,如果你想把所有这些放在关闭中,那就行不通了。你唯一的选择就是让你的构造另一个对象的方法:
var constructors = {
MyObject: function(prop) {
this.property = prop;
}
}
var stringVar = 'MyObject';
var myObject = new constructors[stringVar](1);
答
不知道这是你想要什么:
var obj = {"myObject": function(prop) {this.property = prop; return this;},
"MySecondObject": "probably second function"
},
str = "myObject";
var myChildObj = obj[str]("test");
alert(myChildObj.property);
+2
我想你的意思是'obj [str]'。 –
答
使用一个命名空间,所以你总是知道层次结构,例如下面将在桌面.js文件运行工作与Windows脚本宿主(那里没有window
)
var MyNameSpace = {};
MyNameSpace.MyObject = function(prop) {
this.property = prop;
};
var stringVar = 'MyObject';
var myObject = new MyNameSpace[stringVar](123);
我相信你有什么,是做它的一种可接受的方式。 “环境中性”是什么意思? –
你是什么意思与上下文中性?你总是需要至少对函数的位置,窗口对象或其他位置有所了解。 – bigblind
对不起:环境中立。可以在除浏览器以外的环境下工作的代码。 –