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