2016-12-06 83 views
0

我使用类语法来定义几个原型。在我的代码中的某个点上,我必须创建一个新对象,但哪个对象完全依赖于原型名称,该原型名称作为字符串存储在变量中。如何创建一个新的对象,其超类型的名称被分配给一个变量?

Calling a JavaScript function named in a variable有一个解决方案来调用一个函数时,它的名称存储在变量中,而不使用eval()。我怎样才能达到同样的东西,从这样的原型创建一个对象,如parser = new VARIABLE_CONTAINING_PROTOTYPENAME

回答

2

不知道我是使用字符串表示类型的巨大粉丝,但我不知道你的用例,所以我不会判断!

new原型基于字符串,你可能最好是去创建一个工厂函数:

function factory(name) { 
    switch (name) { 
     case "Object": 
      return new Object(); 
     case "Array": 
      return new Array(); 
     default: 
      return null; 
    } 
} 

var myObj = factory("Object"); 

或者,你可以创建一个对象,然后索引,它得到的构造:

var constructors = { 
    "Object": Object, 
    "Array": Array 
}; 

var myObj = new constructors["Object"]; 
+0

我必须承认,我不喜欢这种方法,虽然我没有那么有经验来想另一种方法。用例如下所示:我在网站上使用'data-evnt-type'属性对HTML元素进行了分类。当页面加载时,JavaScript会查找具有这种属性的每个元素,并为其添加一个eventListener。当事件被触发时,会创建一个解析器对象,但是该解析器对象依赖于包含部分解析器名称的'data-evnt-type'属性中的值。其实第二种解决方案就是我在这种方法中寻找的东西 –

+0

@CutúChiqueño:呃,这不是我见过的最诡异的东西,我想不出更好的方法来取代我的头顶! –

相关问题