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仍然让我惊讶:)。谢谢