【发布时间】:2011-05-20 15:04:36
【问题描述】:
如何在 javascript 中基于变量类型字符串(包含对象名称)创建新对象?
现在我有了:(随着更多工具的推出,列表将变得更长......)
function getTool(name){
switch(name){
case "SelectTool":
return new SelectTool();
break;
case "LineTool":
return new LineTool();
break;
case "BlurTool":
return new BlurTool();
break;
case "PointerTool":
default:
return new PointerTool();
break;
}
}
并定义了我的工具,例如:
PointerTool.prototype = new Tool;
PointerTool.prototype.constructor = PointerTool;
function PointerTool(){
this.name = "PointerTool";
}
PointerTool.prototype.click = function(x, y){
info("You clicked at: "+x+", "+y);
}
我想使用(不断增长的)switch 语句,这似乎是“错误的”。
【问题讨论】:
-
假设,eval 可以做到...
-
@Šime Vidas,但实际上,应该不惜一切代价避免 eval:D
-
@Gabi,我同意
eval()在这里不是正确的解决方案,但我很好奇你为什么断言“应该不惜一切代价避免 eval”。它是该语言的一个不被弃用的特性,具有适当(和不适当)的用途——就像其他所有特性一样。 -
@Šime:我会请 Jeff 为 cmets 添加反对票! :-P
-
有时
eval是唯一的答案,那就是应该使用它的时候。如果这些对象是在匿名自执行函数中定义的,则无法使用window[constructor]引用它们。
标签: javascript dynamic