如何基于可变类型字符串(包含对象名称)在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语句,这似乎是“错误的”。

最佳答案

function getTool(name){
  return ( typeof window[name] === 'function' ) ?
                                    new window[name]() : {/*some default*/};
}

假定在全局PointerTool命名空间中定义了window构造函数。将其替换为您使用的任何 namespace 。

09-05 07:14