如果类名称为字符串,如何在Javascript中创建对象?

时间:2018-08-21 10:21:34

标签: javascript node.js

所以在下面的代码中,我应该可以说 让obj = Factory.create(“ class1”,{})

const class1 = require("./class1")
const class2 = require("./class2")

class Factory{
    static create(className,params){
       return new className(params)
    }
}
module.exports=Factory

3 个答案:

答案 0 :(得分:0)

尝试一下:

let classes = {
    class1: require("./class1"),
    class2: require("./class2")
}
class Factory{
    static create(className,params){
       return new classes[className](params)
    }
}
module.exports=Factory

答案 1 :(得分:0)

如果您准备遵循某种命名约定,例如该class1驻留在class1.js中,而class2驻留在class2.js中,您可以尝试以下操作:

index.js

let classes = {};

class Factory {
    static create(className, params) {
       if (!classes[className]) {
           classes[className] = require(`./${className}.js`);
       }
       console.log(`Creating ${className}...`);
       return new classes[className](params)
    }
}

let c1 = Factory.create('class1', {})
console.log(c1.sayHello());

let c2 = Factory.create('class2', {})
console.log(c2.sayHello()); 

class1.js

class class1 {
    sayHello() {
        return 'Hello from class1';
    }
}

module.exports = class1;

class2.js

class class2 {
    sayHello() {
        return 'Hello from class2';
    }
}

module.exports = class2;

答案 2 :(得分:0)

您不。就像其他所有内容一样,类是由指针定义和引用的。您必须有一种引用该指针的方法,无论是直接引用还是在映射中使用字符串引用。和JS中一样简单。您可以访问,也可以不访问。对于基于字符串键的引用访问,您必须使用该键进行引用。在其他大多数语言中也是如此。关于它,这里有几个答案,但是否则,除非在对象上找到它,否则键将无济于事。

var test = { 'a': 1 };

'test'; // "test"
'test'.a; // undefined

这正是JS的解释方式。要通过字符串引用test,您需要对键测试进行一些测试,否则JS无法对其进行解释。

但这不是一件坏事,因为它可以防止某人向您发送字符串“ adminClass”,并使该类的实例返回给他们,从而暴露各种危险的事情。

因此,对于此范例,您将需要一个与之对应的类图。 Object应该可以正常工作。

相关问题