如何基于类型字符串在javascript中创建新对象?

Dri*_*bel 10 javascript dynamic

如何基于变量类型字符串(包含对象的名称)在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;
  }
}
Run Code Online (Sandbox Code Playgroud)

并定义了我的工具:

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);
}
Run Code Online (Sandbox Code Playgroud)

我想得到(不断增长的)开关声明,似乎'错了'.

use*_*716 18

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

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

  • 如果您正在使用Node.js,则可以使用GLOBAL对象执行相同的操作. (2认同)

Gab*_*aru 8

你应该考虑重新思考你的方法.最好是拥有像Tools对象一样的东西,它可以将工具作为属性,比如

Tools = {"SelectTool": SelectTool /* etc */}`.
Run Code Online (Sandbox Code Playgroud)

这样,您就可以访问new Tools.SelectToolnew Tools[var_with_tool_name].

  • 是的,但即使工具位于不同的命名空间中,它也能正常工作. (2认同)