摘要:原型模式就是將可復(fù)用的,可共享的耗時(shí)大的從父類中提出來,然后放在其原型中,然后通過組合繼承或者寄生組合式繼承將方法和屬性繼承下來,對(duì)于子類中那些需要重寫的方法進(jìn)行重寫,這樣子類創(chuàng)建的對(duì)象既有子類的屬性和方法,也共享了父類的原型方法。
原型模式
原型模式:用原型實(shí)例指向創(chuàng)建對(duì)象的類,使用于創(chuàng)建新的對(duì)象的類共享原型對(duì)象的屬性以及方法。
父類總是要被子類繼承的,如果將屬性和方法都寫在父類的構(gòu)造函數(shù)里會(huì)有一些問題,比如每次子類繼承都要?jiǎng)?chuàng)建一次父類,假如父類的構(gòu)造函數(shù)中創(chuàng)建時(shí)存在很多耗時(shí)的邏輯,或者每次初始化都要做一些重復(fù)性的東西,這樣性能消耗還是蠻大的。為了提高性能,我們需要一種共享機(jī)制。原型模式就是將可復(fù)用的,可共享的、耗時(shí)大的從父類中提出來,然后放在其原型中,然后通過組合繼承或者寄生組合式繼承將方法和屬性繼承下來,對(duì)于子類中那些需要重寫的方法進(jìn)行重寫,這樣子類創(chuàng)建的對(duì)象既有子類的屬性和方法,也共享了父類的原型方法。
以圖片輪播為例:
//圖片輪播 var LoopImages = function (imgArr,container) { this.imageArray = imgArr;//輪播圖片數(shù)組 this.container = container;//輪播圖片容器 } LoopImages.prototype = { //創(chuàng)建輪播圖片 createImage : function () { console.log("LoopImages createImage function"); }, //切換下一張圖片 changeImage:function () { console.log("LoopImages changeImage function"); } } //上下滑動(dòng)切換類 var SlideLooImg = function (imgArr,container) { //構(gòu)造函數(shù)繼承圖片輪播類 LoopImages.call(this,imgArr,container); } SlideLooImg.prototype = new LoopImages(); //重寫繼承的切換下一張圖片方法 SlideLooImg.prototype.changeImage = function () { console.log("SlideLoopImg changeImg function"); } //漸隱切換類 var FadeLoopImg = function (imgArr,container,arrow) { LoopImages.call(this,imgArr,container); //切換箭頭私有變量 this.arrow = arrow; } FadeLoopImg.prototype = new LoopImages(); FadeLoopImg.prototype.changeImage = function () { console.log("FadeLoogImg changeImage function"); } //實(shí)例化一個(gè)漸隱切換圖片類 var fadeImg = new FadeLoopImg(["01.img","02.img","03.img"],"slide",["left.jpg","right.jpg"]); //測(cè)試用例 console.log(fadeImg.container);//slide fadeImg.changeImage();//FadeLoogImg changeImage function原型的拓展
原型對(duì)象是一個(gè)共享的對(duì)象,無論是父類的實(shí)例對(duì)象還是子類的繼承,都是對(duì)它的一個(gè)指向引用,所以原型對(duì)象才會(huì)被共享。在任何時(shí)候,都可以對(duì)基類或者子類進(jìn)行方法的拓展,并且所有被實(shí)例化的對(duì)象或者類都能獲取這些方法。
如下:
//原型的拓展 LoopImages.prototype.getImageLength = function () { return this.imageArray.length; } FadeLoopImg.prototype.getContainer = function () { return this.container; } console.log(fadeImg.getImageLength());//3 console.log(fadeImg.getContainer());//slide
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/98096.html
摘要:首先,需要來理清一些基礎(chǔ)的計(jì)算機(jī)編程概念編程哲學(xué)與設(shè)計(jì)模式計(jì)算機(jī)編程理念源自于對(duì)現(xiàn)實(shí)抽象的哲學(xué)思考,面向?qū)ο缶幊淌瞧湟环N思維方式,與它并駕齊驅(qū)的是另外兩種思路過程式和函數(shù)式編程。 JavaScript 中的原型機(jī)制一直以來都被眾多開發(fā)者(包括本人)低估甚至忽視了,這是因?yàn)榻^大多數(shù)人沒有想要深刻理解這個(gè)機(jī)制的內(nèi)涵,以及越來越多的開發(fā)者缺乏計(jì)算機(jī)編程相關(guān)的基礎(chǔ)知識(shí)。對(duì)于這樣的開發(fā)者來說 J...
摘要:在中,并沒有對(duì)抽象類和接口的支持。例如,當(dāng)對(duì)象需要對(duì)象的能力時(shí),可以有選擇地把對(duì)象的構(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是一門典型...
摘要:三種使用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法和的作用都是在某個(gè)特殊對(duì)象的作用域中調(diào)用函數(shù)。這種方式還支持向構(gòu)造函數(shù)傳遞參數(shù)。叫法上把函數(shù)叫做構(gòu)造函數(shù),其他無區(qū)別適用情境可以在特殊的情況下用來為對(duì)象創(chuàng)建構(gòu)造函數(shù)。 一、工廠模式 工廠模式:使用字面量和object構(gòu)造函數(shù)會(huì)有很多重復(fù)代碼,在此基礎(chǔ)上改進(jìn)showImg(https://segmentfault.com/img/bVbmKxb?w=456&...
摘要:值得注意的是原型對(duì)象也擁有一個(gè)屬性指向其函數(shù)。以上的原因就造成了很少有使用純的原型模式創(chuàng)建對(duì)象,而其他混合使用原型模式的創(chuàng)建對(duì)象模式就不在這里展開說了。 第一次記錄自己學(xué)習(xí)的腳步,我選擇了JavaScript中自認(rèn)為比較熟悉的一小部分來說,誠(chéng)摯的希望能夠得到各位前輩的批評(píng)與指正。而對(duì)于看到我這篇筆記希望從這篇筆記中收獲知識(shí)的讀者,我希望你們可以參考權(quán)威,擁有自己的真知灼見而不聽我一家之...
摘要:目錄導(dǎo)語理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方式的繼承機(jī)制原型對(duì)象原型鏈與原型對(duì)象相關(guān)的方法小結(jié)導(dǎo)語前面的系列文章,基本把的核心知識(shí)點(diǎn)的基本語法標(biāo)準(zhǔn)庫等章節(jié)講解完本章開始進(jìn)入核心知識(shí)點(diǎn)的高級(jí)部分面向?qū)ο蟮某绦蛟O(shè)計(jì),這一部分的內(nèi)容將會(huì)對(duì)對(duì)象 目錄 導(dǎo)語 1.理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對(duì)象的方式 3.JavaScript的繼承機(jī)制 3.1 原型對(duì)象 3.2 原型鏈 3.3 與...
摘要:對(duì)象會(huì)記住它的原型給對(duì)象提供了一個(gè)名為的隱藏屬性,某個(gè)對(duì)象的屬性默認(rèn)會(huì)指向它的構(gòu)造器的原型對(duì)象,即。我們通過代碼來驗(yàn)證再來實(shí)際上,就是對(duì)象跟對(duì)象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對(duì)未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語言的對(duì)象系統(tǒng)中,封裝數(shù)據(jù)是由語法解析來實(shí)現(xiàn)的,這些語言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...
閱讀 2678·2021-11-02 14:39
閱讀 4409·2021-10-11 10:58
閱讀 1626·2021-09-06 15:12
閱讀 1946·2021-09-01 10:49
閱讀 1400·2019-08-29 18:31
閱讀 1956·2019-08-29 16:10
閱讀 3413·2019-08-28 18:21
閱讀 947·2019-08-26 10:42