JS 創(chuàng)建對(duì)象的模式實(shí)例小結(jié)
本文實(shí)例總結(jié)了JS 創(chuàng)建對(duì)象的模式。分享給大家供大家參考,具體如下:
1.工廠模式
抽象了創(chuàng)建具體對(duì)象的過(guò)程,創(chuàng)建了一種函數(shù),封裝特定的接口創(chuàng)建對(duì)象的細(xì)節(jié)。
- 新建一個(gè)對(duì)象
- 定義屬性和方法
return
剛新建的對(duì)象
function createPerson(name, age, job) { var obj = new Object(); obj.name = name; obj.age = age; obj.job = job; obj.sayHi = function() { congsole.log(this.name); }; return obj; } var person1 = createPerson("name1", "age1", "job1"); var person2 = createPerson("name2", "age2", "job2");
存在問(wèn)題:
沒(méi)有解決對(duì)象識(shí)別的問(wèn)題(怎么識(shí)別對(duì)象的類(lèi)型)
2.構(gòu)造函數(shù)模式
- 不顯式創(chuàng)建對(duì)象
- 直接將屬性和方法定義在
this
中 - 沒(méi)有
return
- 通過(guò)
new
操作符調(diào)用
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayHi = function() { console.log(this.name); }; } var person1 = new Person("name1", "age1", "job1"); var person2 = new Person("name2", "age2", "job2");
存在問(wèn)題:
- 每個(gè)方法都要在實(shí)例上創(chuàng)建一次
3.原型模式
創(chuàng)建的每一個(gè)函數(shù)都有prototype
原型屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途是包含可以由特定類(lèi)型的所有實(shí)例共享的屬性和方法。
所有原生引用類(lèi)型都在其構(gòu)造函數(shù)的原型上定義了方法
function Person{ } Person.prototype.name="name" Person.prototype.age="age" Person.prototype.job="job" Person.prototype.sayHi=function(){ console.log(this.name) } var person1=new Person() var person2=new Person()
存在問(wèn)題:
- 所有屬性是被很多實(shí)例共享的
4.組合構(gòu)造和原型模式
構(gòu)造函數(shù)用來(lái)定義實(shí)例屬性,原型模式用來(lái)定義方法和共享的屬性
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; } Person.prototype={ constructor:Person; sayHi:function(){ console.log(this.name) } } var person1 = new Person("name1", "age1", "job1");
5.動(dòng)態(tài)原型模式
這里對(duì)原型的修改,能夠?qū)λ袑?shí)例生效,只在初次調(diào)用構(gòu)造函數(shù)會(huì)執(zhí)行
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; if(typeof this.sayHi !="function" ){ Person.prototype.sayHi=functong(){ console.log(this.name) } } } var person1 = new Person("name1", "age1", "job1");
6.寄生構(gòu)造函數(shù)模式
工廠模式+構(gòu)造函數(shù)
- 返回的對(duì)象與構(gòu)造函數(shù)、構(gòu)造函數(shù)的原型屬性之間沒(méi)有關(guān)系
- 不能依賴(lài)
instanceof
來(lái)去定對(duì)象原型 - 不建議使用
function Person(name, age, job) { var obj = new Object(); obj.name = name; obj.age = age; obj.job = job; obj.sayHi = function() { congsole.log(this.name); }; return obj; } var person1 = new Person("name1", "age1", "job1");
7.穩(wěn)妥構(gòu)造模式
- 沒(méi)有公共屬性
- 不使用
this
- 不使用
new
function Person(name, age, job) { var obj = new Object(); // 定義室友變量和函數(shù) obj.sayHi = function() { congsole.log(name); }; return obj; } var person1 = Person("name1", "age1", "job1"); // name1
摘抄自《JavaScript 高級(jí)程序設(shè)計(jì)》第六章
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- js 創(chuàng)建對(duì)象的多種方式與優(yōu)缺點(diǎn)小結(jié)
- 詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法
- JS創(chuàng)建自定義對(duì)象的六種方法總結(jié)
- 詳解 javascript對(duì)象創(chuàng)建模式
- JavaScript 面向?qū)ο蟪绦蛟O(shè)計(jì)詳解【類(lèi)的創(chuàng)建、實(shí)例對(duì)象、構(gòu)造函數(shù)、原型等】
- 原生JavaScript創(chuàng)建不可變對(duì)象的方法簡(jiǎn)單示例
- JS自定義對(duì)象創(chuàng)建與簡(jiǎn)單使用方法示例
- JavaScript創(chuàng)建對(duì)象的四種常用模式實(shí)例分析
- JavaScript 對(duì)象創(chuàng)建的3種方法
相關(guān)文章
JS實(shí)現(xiàn)兼容火狐及IE iframe onload屬性的遮罩層隱藏及顯示效果
這篇文章主要介紹了JS實(shí)現(xiàn)兼容火狐及IE iframe onload屬性的遮罩層隱藏及顯示效果,涉及javascript事件響應(yīng)及針對(duì)頁(yè)面元素屬性的動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下2016-08-08簡(jiǎn)介alert()與console.log()的不同
alert()和console.log()在程序中經(jīng)常會(huì)用到,大家知道他們的區(qū)別嗎,接下來(lái),通過(guò)本文給大家介紹alert()與console.log()的不同,需要的朋友可以參考下2015-08-08基于javascript實(shí)現(xiàn)泡泡大冒險(xiǎn)網(wǎng)頁(yè)版小游戲
這篇文章主要介紹了基于javascript實(shí)現(xiàn)泡泡大冒險(xiǎn)網(wǎng)頁(yè)版小游戲,很有趣的游戲,可以練習(xí)打字速度,感興趣的小伙伴們可以參考一下2016-03-0310分鐘徹底搞懂微信小程序單頁(yè)面應(yīng)用路由
這篇文章主要給大家介紹了光宇微信小程序單頁(yè)面應(yīng)用路由的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03JS target與currentTarget區(qū)別說(shuō)明
target在事件流的目標(biāo)階段;currentTarget在事件流的捕獲,目標(biāo)及冒泡階段。只有當(dāng)事件流處在目標(biāo)階段的時(shí)候,兩個(gè)的指向才是一樣的,而當(dāng)處于捕獲和冒泡階段的時(shí)候,target指向被單擊的對(duì)象而currentTarget指向當(dāng)前事件活動(dòng)的對(duì)象(一般為父級(jí))。2011-08-08WebApi+Bootstrap+KnockoutJs打造單頁(yè)面程序
這篇文章主要介紹了WebApi+Bootstrap+KnockoutJs打造單頁(yè)面程序的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05JS輕松實(shí)現(xiàn)CSS設(shè)置,DIV+CSS常用CSS設(shè)置
JS輕松實(shí)現(xiàn)CSS設(shè)置,DIV+CSS常用CSS設(shè)置...2007-02-02JS前端認(rèn)證授權(quán)技巧歸納總結(jié)
這篇文章主要為大家介紹了JS前端認(rèn)證授權(quán)技巧歸納總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03