Javascript 有没有比这更好的办法来建立一个工厂?

Javascript 有没有比这更好的办法来建立一个工厂?,javascript,Javascript,我创建了一个类似这样的工厂,以根据select值创建特定对象: let myFactory = { "CREATE_DOCTOR" : function(){return new Doctor();} "CREATE_NURSE" : function(){return new Nurse();} "CREATE_PATIENT" : function(){return new Patient();}

我创建了一个类似这样的工厂,以根据
select
值创建特定对象:

let myFactory = { "CREATE_DOCTOR" : function(){return new Doctor();}
                  "CREATE_NURSE" : function(){return new Nurse();}          
                  "CREATE_PATIENT" : function(){return new Patient();}
                };
let aPerson=[];

mySelect.addEventListener("change", function(){
  aPerson.push(myFactory["CREATE_"+mySelect.options[mySelect.selectedIndex].value]());
}

当然,我有我可以在工厂中创建的所有类,mySelect获得对htmlselect的引用。但我的问题是。。。有没有更好的办法?因为我知道的另一种方法是做一个非常大的I/O,考虑所有的替代方案,这使得代码变得不可维护。

< P>不需要那些包装器函数,并且<代码>选择< /COD>元素有一个<代码>值< /代码>属性,所以:

var classes = {
    DOCTOR:  Doctor,
    NURSE:   Nurse,
    PATIENT: Patient
};
mySelect.addEventListener("change", function(){
    aPerson.push(new classes[mySelect.value]());
});
例如:

函数医生(){
console.log(“创建医生”);
}
职能护士(){
console.log(“创建护士”);
}
功能病人(){
console.log(“创建患者”);
}
变量类={
医生:医生,
护士:护士,
病人:病人
};
var aPerson=[];
var mySelect=document.getElementById(“mySelect”);
addEventListener(“change”,function()){
push(新类[mySelect.value]());
});

医生
看护
病人

您需要定义“更好”的含义,因为它有广泛的含义。快速浏览一下,我可以说我不喜欢myFactory API的CAPS成员……为什么不
createDoctor
而不是
CREATE\u DOCTOR
只是相同的不同变体呢。例如,
让我的工厂={医生、护士、病人}和以后的
新建myFactory[mySelect.options[mySelect.selectedIndex.value]()
@bhantol Ok。我说的“更好”是指比我的代码更容易维护,或者更有用。哇,我永远不会想到我可以用最后一种方法来完成。ES6仍然让我惊讶:)。谢谢