所以在下面的代码中,我应该可以说 让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
答案 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
应该可以正常工作。