javascript工廠模式和構造函數模式創(chuàng)建對象方法解析
工廠模式是軟件工程領域一種廣為人知的設計模式,這種模式抽象了創(chuàng)建具體對象的過程(本書后面還將討論其他設計模式及其在JavaScript 中的實現)。考慮到在ECMAScript 中無法創(chuàng)建類,開發(fā)人員就發(fā)明了一種函數,用函數來封裝以特定接口創(chuàng)建對象的細節(jié),如下面的例子所示。
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 對象??梢詿o數次地調用這個函數,而每次它都會返回一個包含三個屬性一個方法的對象。工廠模式雖然解決了創(chuàng)建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。隨著JavaScript的發(fā)展,又一個新模式出現了。
二、構造函數模式
像Object 和Array 這樣的原生構造函數,在運行時會自動出現在執(zhí)行環(huán)境中。此外,也可以創(chuàng)建自定義的構造函數,從而定義自定義對象類型的屬性和方法。例如,可以使用構造函數模式將前面的例子重寫如下。
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()中相同的部分外,還存在以下不同之處:
- 沒有顯式地創(chuàng)建對象;
- 直接將屬性和方法賦給了this 對象;
- 沒有return 語句。
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
JS中的常見數組遍歷案例詳解(forEach,?map,?filter,?sort,?reduce,?ever
這篇文章主要介紹了JS中的常見數組遍歷方法詳解(forEach,?map,?filter,?sort,?reduce,?every),本篇講用實際案例詳解他們的語法和用法,需要的朋友可以參考下2023-05-05千分位數字格式化(用逗號隔開 代碼已做了修改 支持0-9位逗號隔開)的JS代碼
這篇文章主要介紹了千分位數字格式化的JS代碼,有需要的朋友可以參考一下2013-12-12