摘要:組合構(gòu)造函數(shù)原型模式解決構(gòu)造傳參和共享問題,可以組合構(gòu)造函數(shù)原型模式不共享的使用構(gòu)造函數(shù)共享的使用原型模式強(qiáng)制指向這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。
寫在前面:
之前的文章都是寫構(gòu)造函數(shù),原型之類的。但是我們都知道原型最大的優(yōu)點(diǎn)也是缺點(diǎn)就是共享。也是我們最頭疼的問題.
據(jù)共享的緣故,導(dǎo)致很多開發(fā)者放棄使用原型,因?yàn)槊看螌?shí)例化出的數(shù)據(jù)需要保留自己的特性,而不能共享。
解決構(gòu)造傳參和共享問題,可以組合構(gòu)造函數(shù)+原型模式
function Box(name, age) { //不共享的使用構(gòu)造函數(shù) this.name = name; this.age = age; this.fruits = ["apple", "banana", "orange"]; }; Box.prototype = { //共享的使用原型模式 constructor: Box, //強(qiáng)制指向Box run: function() { return this.name + this.age + this.fruits; } }
PS:這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。 是創(chuàng)建對象比較好的方法。
動(dòng)態(tài)原型模式原型模式, 不管你是否調(diào)用了原型中的共享方法, 它都會(huì)初始化原型中的方法, 并且在
聲明一個(gè)對象時(shí), 構(gòu)造函數(shù)+原型部分讓人感覺又很怪異, 最好就是把構(gòu)造函數(shù)和原型封裝
到一起。為了解決這個(gè)問題,我們可以使用動(dòng)態(tài)原型模式
動(dòng)態(tài)原型模式:
function Box(name ,age) { //將所有信息封裝到函數(shù)體內(nèi) this.name = name; this.age = age; if (typeof this.run != "function") { //僅在第一次調(diào)用的初始化 Box.prototype.run= function() { return this.name; }; } } var box = newBox("Lee", 3); alert(box.run())
第一次調(diào)用構(gòu)造函數(shù)時(shí), run()方法發(fā)現(xiàn)不存在,然后初始化原型。當(dāng)?shù)诙握{(diào)用,就不會(huì)初始化, 并且第二次創(chuàng)建新對象, 原型也不會(huì)再初始化了。 這樣及得到了封裝, 又實(shí)現(xiàn)了原型方法共享,并且屬性都保持獨(dú)立.
注意:使用動(dòng)態(tài)原型模式,千萬不能使用字面量的方式重寫原型,因?yàn)樗鼤?huì)切斷實(shí)例與新原型之間的聯(lián)系?。?!
這是Javascript OOP里面的其中兩種設(shè)計(jì)模式,下一篇文章會(huì)講寄生構(gòu)造函數(shù)模式和穩(wěn)妥構(gòu)造函數(shù)模式。
還有最頭疼的繼承!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88287.html
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:在中,并沒有對抽象類和接口的支持。例如,當(dāng)對象需要對象的能力時(shí),可以有選擇地把對象的構(gòu)造器的原型指向?qū)ο螅瑥亩_(dá)到繼承的效果。本節(jié)內(nèi)容為設(shè)計(jì)模式與開發(fā)實(shí)踐第一章筆記。 動(dòng)態(tài)類型語言 編程語言按數(shù)據(jù)類型大體可以分為兩類:靜態(tài)類型語言與動(dòng)態(tài)類型語言。 靜態(tài)類型語言在編譯時(shí)已確定變量類型,動(dòng)態(tài)類型語言的變量類型要到程序運(yùn)行時(shí),待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...
摘要:面向?qū)ο竺嫦驅(qū)ο蟮母攀雒嫦驅(qū)ο笫鞘裁疵嫦驅(qū)ο缶幊痰娜Q是,簡稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊痰纳礁柚饕奶卣魇欠庋b繼承多態(tài)。 面向?qū)ο?面向?qū)ο蟮母攀?面向?qū)ο笫鞘裁?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)...
摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。 學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...
閱讀 2610·2021-11-17 09:33
閱讀 3966·2021-10-19 11:46
閱讀 921·2021-10-14 09:42
閱讀 2266·2021-09-22 15:41
閱讀 4239·2021-09-22 15:20
閱讀 4648·2021-09-07 10:22
閱讀 2320·2021-09-04 16:40
閱讀 826·2019-08-30 15:52