1、工廠模式設計模式
工廠模式是軟件工程領域一種廣爲人知的設計模式,這種模式抽象了建立具體對象的過程(本書後
面還將討論其餘設計模式及其在JavaScript 中的實現)。考慮到在ECMAScript 中沒法建立類,開發人員
就發明了一種函數,用函數來封裝以特定接口建立對象的細節,以下面的例子所示。函數
function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 27, "Doctor");
函數createPerson()可以根據接受的參數來構建一個包含全部必要信息的Person 對象。能夠無
數次地調用這個函數,而每次它都會返回一個包含三個屬性一個方法的對象。工廠模式雖然解決了建立
多個類似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。隨着JavaScript
的發展,又一個新模式出現了。this
2、構造函數模式spa
像Object 和Array 這樣
的原生構造函數,在運行時會自動出如今執行環境中。此外,也能夠建立自定義的構造函數,從而定義
自定義對象類型的屬性和方法。例如,能夠使用構造函數模式將前面的例子重寫以下。設計
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 27, "Doctor");
在這個例子中,Person()函數取代了createPerson()函數。咱們注意到,Person()中的代碼
除了與createPerson()中相同的部分外,還存在如下不一樣之處:
. 沒有顯式地建立對象;
. 直接將屬性和方法賦給了this 對象;
. 沒有return 語句。code