JavaScript建立物件(一)——工廠模式

weixin_33807284發表於2018-10-18

使用Object建構函式是js中建立物件最簡單的一種方式:

var person = new Object();

person.name = 'Bob';
person.age = 18;
person.job = '全棧工程師';
person.sayName = function(){
    console.log(this.name);
}

建立物件還可以使用物件字面量的方式,像下面這樣:

var person = {
    name: 'Bob',
    age: 18,
    job: '全棧工程師',
    sayName: function(){
        console.log(this.name);
    }
}

但是這兩個方式有個明顯的缺點:使用同一個介面建立很多物件,會產生大量的重複程式碼。為了解決這個問題,人們開始使用工廠模式的一種變體來建立物件。

工廠模式是軟體工程領域一種廣為人知的設計模式,這種模式抽象了建立物件的具體過程。考慮到在ECMAScript中無法建立類,開發人員就發明了一種函式,用函式來封裝以特定介面建立物件的細節,如下面的例子所示:

function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        console.log(this.name);
    }
    return o;
}

函式createPerson()能夠根據接受的引數來構建一個包含所有必要資訊的Person物件。可以無數次的呼叫這個函式,而每次它都會返回一個包含三個屬性一個方法的物件。這大大簡化了重複程式碼的書寫。

假如我們需要建立三個Person物件,如果使用Object建構函式的方式,要像下面這樣:

var person1 = new Object();
person1.name = 'Bob';
person1.age = 18;
person1.job = '全棧工程師';
person1.sayName = function(){
    console.log(this.name);
}

var person2 = new Object();
person2.name = '張三';
person2.age = 20;
person2.job = 'Java工程師';
person2.sayName = function(){
    console.log(this.name);
}

var person3 = new Object();
person3.name = '李四';
person3.age = 22;
person3.job = '前端工程師';
person3.sayName = function(){
    console.log(this.name);
}

但如果使用工廠模式,只要這樣:

function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        console.log(this.name);
    }
    return o;
}

var p1 = createPerson('Bob', 18, '全棧工程師');
var p2 = createPerson('張三', 20, 'Java工程師');
var p3 = createPerson('李四', 22, '前端工程師');

很明顯,使用工廠模式建立物件的程式碼要簡單多了,看起來更舒服,而且建立的物件越多,工廠模式的優點越明顯。

但是,工廠模式也不是沒有缺點,雖然簡化了建立多個相似物件的程式碼,但卻沒有解決物件識別的問題(即怎樣知道一個物件的型別)。隨著javascript的發展,又一個新模式出現了——建構函式模式,下一篇文章就來討論討論該模式。

文章參考:《JavaScript高階程式設計》第3版

相關文章