亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)單談?wù)刯avascript代碼復(fù)用模式

 更新時(shí)間:2015年01月28日 16:19:39   投稿:hebedich  
這篇文章主要簡(jiǎn)單談?wù)刯avascript代碼復(fù)用模式,主要詳細(xì)介紹了類(lèi)式繼承模式中的默認(rèn)模式,希望大家能夠喜歡。

代碼復(fù)用有一個(gè)著名的原則,是GoF提出的:優(yōu)先使用對(duì)象組合,而不是類(lèi)繼承。在javascript中,并沒(méi)有類(lèi)的概念,所以代碼的復(fù)用,也并不局限于類(lèi)式繼承。javascript中創(chuàng)建對(duì)象的方法很多,有構(gòu)造函數(shù),可以使用new創(chuàng)建對(duì)象,并且可以動(dòng)態(tài)的修改對(duì)象。javascript的非類(lèi)式繼承(可稱(chēng)為現(xiàn)代繼承模式)復(fù)用方法也很多,例如,利用其它對(duì)象組合成所需要的對(duì)象,對(duì)象混入技術(shù),借用和復(fù)用所需要的方法。

類(lèi)式繼承模式-默認(rèn)模式

兩個(gè)構(gòu)造函數(shù)Parent和Child的例子:

復(fù)制代碼 代碼如下:

function Parent(name){
this.name = name||"Adam";
}
Parent.prototype.say = {
return this.name;
};
function Child(name){
}
inherit(Child,Parent);

下面是可復(fù)用繼承函數(shù)inherit()的一種實(shí)現(xiàn)方法:

復(fù)制代碼 代碼如下:

function inherit(C,P){
C.prototype = new P();
}

這里原型屬性應(yīng)該指向一個(gè)對(duì)象,而不是一個(gè)函數(shù),因此他必須指向一個(gè)由父構(gòu)造函數(shù)所創(chuàng)建的實(shí)例,而不是指向構(gòu)造函數(shù)本身。

在這之后,創(chuàng)建Child對(duì)象時(shí),會(huì)通過(guò)原型從Parent實(shí)例獲得他的功能:

復(fù)制代碼 代碼如下:

var kid =new Child();
kid.say();//"Adam"

調(diào)用繼承之后的原型鏈:

進(jìn)一步添加kid的屬性:

復(fù)制代碼 代碼如下:

var kid = new Child();
kid.name = "Patrick";
kid.say();//"Patrick"

原型鏈的變化情況:

可以在自己對(duì)象屬性里面找到name,就不用再去查找原型鏈了。

使用上述模式的缺點(diǎn),其中一個(gè)缺點(diǎn)是同時(shí)繼承了兩個(gè)對(duì)象的屬性,即添加到this的屬性及原型屬性。大多數(shù)時(shí)候,不需要自身的這些屬性。

另外一個(gè)缺點(diǎn),使用inherit()繼承不支持將參數(shù)傳遞給子構(gòu)造函數(shù)中,例如:

復(fù)制代碼 代碼如下:

var s = new Child("Seth");
s.say();//"Adam"

這個(gè)結(jié)果并不是期望的,雖然子構(gòu)造函數(shù)可以將參數(shù)傳遞到父構(gòu)造函數(shù)中,但是這樣每次需要一個(gè)子對(duì)象時(shí),都必須重新執(zhí)行這種繼承機(jī)制,而且效率低下,原因是最終會(huì)重新創(chuàng)建父對(duì)象。

本文就先到這里了,后續(xù)我們將持續(xù)更新javascript代碼復(fù)用模式的其余幾種模式。

相關(guān)文章

  • 老生常談?wù)谡謱?滾動(dòng)條的問(wèn)題

    老生常談?wù)谡謱?滾動(dòng)條的問(wèn)題

    小編遇到的問(wèn)題是在彈出層后面的 遮罩層,因?yàn)橛袧L動(dòng)條,導(dǎo)致滾動(dòng)條下面不可視區(qū)域沒(méi)有遮罩層。下面就為大家介紹一下解決方法
    2016-04-04
  • JavaScript面向?qū)ο缶帉?xiě)購(gòu)物車(chē)功能

    JavaScript面向?qū)ο缶帉?xiě)購(gòu)物車(chē)功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript面向?qū)ο缶帉?xiě)購(gòu)物車(chē)功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Three.js實(shí)現(xiàn)臉書(shū)元宇宙3D動(dòng)態(tài)Logo效果

    Three.js實(shí)現(xiàn)臉書(shū)元宇宙3D動(dòng)態(tài)Logo效果

    本文主要講述通過(guò) Three.js + Blender 技術(shù)棧,實(shí)現(xiàn) Meta 公司炫酷的 3D 動(dòng)態(tài) Logo,內(nèi)容包括基礎(chǔ)模型圓環(huán)、環(huán)面扭結(jié)、管道及模型生成、模型加載、添加動(dòng)畫(huà)、添加點(diǎn)擊事件、更換材質(zhì)等
    2021-11-11
  • JS查找字符串中出現(xiàn)次數(shù)最多的字符

    JS查找字符串中出現(xiàn)次數(shù)最多的字符

    本文給大家?guī)?lái)兩種js中查找字符串中出現(xiàn)次數(shù)最多的字符,在這兩種方法中小編推薦使用第二種,對(duì)js查找字符串出現(xiàn)次數(shù)的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2016-09-09
  • js實(shí)現(xiàn)圖片360度旋轉(zhuǎn)

    js實(shí)現(xiàn)圖片360度旋轉(zhuǎn)

    本文主要介紹了js實(shí)現(xiàn)圖片360度旋轉(zhuǎn)的思路與方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Canvas放置反彈效果隨機(jī)圖形(實(shí)例)

    Canvas放置反彈效果隨機(jī)圖形(實(shí)例)

    下面小編就為大家?guī)?lái)一篇Canvas放置反彈效果隨機(jī)圖形(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 基于JavaScript實(shí)現(xiàn)瀏覽器添加收藏功能

    基于JavaScript實(shí)現(xiàn)瀏覽器添加收藏功能

    今天搞項(xiàng)目的時(shí)候?yàn)榱藢?shí)現(xiàn)瀏覽者實(shí)現(xiàn)添加收藏的功能,特地了解了一下相關(guān)的API,整理了一段代碼幫助大家實(shí)現(xiàn)瀏覽器添加收藏功能,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 十個(gè)利用JavaScript實(shí)現(xiàn)的愛(ài)心動(dòng)畫(huà)特效

    十個(gè)利用JavaScript實(shí)現(xiàn)的愛(ài)心動(dòng)畫(huà)特效

    情人節(jié)將至,程序員證明自己不是直男的時(shí)候到啦!小編為大家準(zhǔn)備了十個(gè)通過(guò)JavaScript實(shí)現(xiàn)的愛(ài)心動(dòng)畫(huà)特效,快學(xué)起來(lái),到時(shí)候給女朋友一個(gè)驚喜吧
    2022-02-02
  • JavaScript 完成注冊(cè)頁(yè)面表單校驗(yàn)的實(shí)例

    JavaScript 完成注冊(cè)頁(yè)面表單校驗(yàn)的實(shí)例

    下面小編就為大家?guī)?lái)一篇JavaScript 完成注冊(cè)頁(yè)面表單校驗(yàn)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • TypeScript中類(lèi)型兼容性的示例詳解

    TypeScript中類(lèi)型兼容性的示例詳解

    JavaScript是一門(mén)弱類(lèi)型語(yǔ)言,它對(duì)類(lèi)型是弱校驗(yàn),所以才有了TypeScript。本文就來(lái)和大家一起看看TypeScript的類(lèi)型兼容性的概念和分類(lèi),需要的可以參考一下
    2022-08-08

最新評(píng)論