javascript工廠模式和構(gòu)造函數(shù)模式創(chuàng)建對象方法解析
工廠模式是軟件工程領(lǐng)域一種廣為人知的設(shè)計模式,這種模式抽象了創(chuàng)建具體對象的過程(本書后面還將討論其他設(shè)計模式及其在JavaScript 中的實現(xiàn))??紤]到在ECMAScript 中無法創(chuàng)建類,開發(fā)人員就發(fā)明了一種函數(shù),用函數(shù)來封裝以特定接口創(chuàng)建對象的細(xì)節(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");
函數(shù)createPerson()能夠根據(jù)接受的參數(shù)來構(gòu)建一個包含所有必要信息的Person 對象??梢詿o數(shù)次地調(diào)用這個函數(shù),而每次它都會返回一個包含三個屬性一個方法的對象。工廠模式雖然解決了創(chuàng)建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。隨著JavaScript的發(fā)展,又一個新模式出現(xiàn)了。
二、構(gòu)造函數(shù)模式
像Object 和Array 這樣的原生構(gòu)造函數(shù),在運行時會自動出現(xiàn)在執(zhí)行環(huán)境中。此外,也可以創(chuàng)建自定義的構(gòu)造函數(shù),從而定義自定義對象類型的屬性和方法。例如,可以使用構(gòu)造函數(shù)模式將前面的例子重寫如下。
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()函數(shù)取代了createPerson()函數(shù)。我們注意到,Person()中的代碼除了與createPerson()中相同的部分外,還存在以下不同之處:
- 沒有顯式地創(chuàng)建對象;
- 直接將屬性和方法賦給了this 對象;
- 沒有return 語句。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- JavaScript對象創(chuàng)建模式實例匯總
- 深入理解JavaScript系列(48):對象創(chuàng)建模式(下篇)
- 深入理解JavaScript系列(47):對象創(chuàng)建模式(上篇)
- JS中創(chuàng)建自定義類型的常用模式總結(jié)【工廠模式,構(gòu)造函數(shù)模式,原型模式,動態(tài)原型模式等】
- 淺談js對象的創(chuàng)建和對6種繼承模式的理解和遐想
- JavaScript中創(chuàng)建對象的模式匯總
- js面向?qū)ο笾R妱?chuàng)建對象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- 詳解 javascript對象創(chuàng)建模式
相關(guān)文章
JS中的常見數(shù)組遍歷案例詳解(forEach,?map,?filter,?sort,?reduce,?ever
這篇文章主要介紹了JS中的常見數(shù)組遍歷方法詳解(forEach,?map,?filter,?sort,?reduce,?every),本篇講用實際案例詳解他們的語法和用法,需要的朋友可以參考下2023-05-05js簡單實現(xiàn)根據(jù)身份證號碼識別性別年齡生日
根據(jù)身份證號碼識別性別年齡生日,目前就有一個這樣的需求,那么接下來為大家介紹下使用js是如何實現(xiàn)的,感興趣的朋友不要錯過2013-11-11Javascript 八進(jìn)制轉(zhuǎn)義字符(8進(jìn)制)
最近在看一些Javascript玩魔術(shù)的資料,感嘆那些真正的是在玩技術(shù),相當(dāng)讓人佩服。2011-04-04千分位數(shù)字格式化(用逗號隔開 代碼已做了修改 支持0-9位逗號隔開)的JS代碼
這篇文章主要介紹了千分位數(shù)字格式化的JS代碼,有需要的朋友可以參考一下2013-12-12