雖然Object構造函數或對象字面量都可以用來創(chuàng)建單個對象,但這些方式有個明顯缺點:使用同一個借口創(chuàng)建很多對象,會產生大量的重復代碼。為解決這一個問題,人們開始使用工廠模式的一種變體。
這種模式抽象了創(chuàng)建具體對象的過程,考慮到ECMAScript中無法創(chuàng)建類,開發(fā)人員就創(chuàng)建了一種函數,用函數來封裝以特定接口創(chuàng)建對象的細節(jié),如下:
function creatPerson(name,age,job){
var ?o=new Object(0;
o.name=name;
o.age=age;
o.job=job;
o.sayName=function(){
alert(this.name)
? ? ? };
? ? return 0;
}
var person1=creatPerson("xiaoming",19,"softEngineer");
var person2=creatPerson("xiaohong",16,"Doctor")
函數creatPerson()能夠根據接受的參數來構建一個包含所有必要信息的Person對象。可以無數次的調用這個函數,而每次它都會返回一個包含三個屬性一個方法的對象。工廠模式雖然解決了創(chuàng)建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型。)