2017-08-01 114 views
1

JS6,浏览器如何通过字符串名称创建类的实例?我也尝试为这些目的使用`window`。

如何通过字符串名称创建类的实例?例如,我有一个字符串Foo,我需要创建一个Foo类的实例。我不想写这样的结构:

let className = getClassName(); // returns 'Foo', `Stuff` or other 
... 
let item = null; 

if(`Foo` == className){ 
    item = new Foo(); 
} 
else if(`Stuff` == className){ 
    item = new Stuff(); 
} 

UPD

我试着打通window对象访问我的类的构造函数,但我有问题:它返回undefined。但我的类存在和浏览器知道这一点:

enter image description here

+0

它是浏览器的JavaScript,或nodejs? – Val

+0

如果它在浏览器上下文中运行,试试'new window ['className']()'。 – Phylogenesis

+0

这是浏览器javascript –

回答

1

你想要做的是你应该做的,在我看来。这是在运行时知道对象类型时实例化对象的标准方法,称为工厂方法模式。

通过使用封装对象创建的工厂对象,您应该避免在代码中的任何地方重复此操作。这个工厂对象将有一个将类型名称作为其参数的方法。

相关问题