使用ES6 JavaScript类动态初始化实例

EES*_*EES 4 javascript ecmascript-6

如何使用ES6类动态初始化对象?

class AnObject{
    constructor(name) {
    this.name = name;
   }
}
let p1 = new AnObject("name1");
console.log("p1 name: " + p1.name);
var className = "An" + "Object";
let p2 = new className("name2"); // Dynamically init an object?
console.log("p2 name: " + p2.name);
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

通常的方法是将构造函数放在一个对象上,然后使用生成的字符串键在该对象上查找它们:

let ctors = {
    AnObject: class {
        constructor(name) {
            this.name = name;
        }
    }
};

let className = "An" + "Object";
let p2 = new ctors[className]("name2");
console.log("p2 name: " + p2.name);
Run Code Online (Sandbox Code Playgroud)

关于Babel的REPL的实时拷贝


或者,我只是在这里完成不推荐它,你可以使用eval:

class AnObject {
    constructor(name) {
        this.name = name;
    }
}
let className = "An" + "Object";
let p2 = new (eval(className))("name2");
console.log("p2 name: " + p2.name)
Run Code Online (Sandbox Code Playgroud)

关于Babel的REPL的实时拷贝

或者更冗长,但可能更清楚:

let className = "An" + "Object";
let ctor = eval(className);
let p2 = new ctor("name2");
console.log("p2 name: " + p2.name)
Run Code Online (Sandbox Code Playgroud)

eval只要你完全控制你正在评估的字符串就可以了.但它通常在结构良好的代码中过度杀伤.