最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

兩個構(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)該指向一個對象,而不是一個函數(shù),因此他必須指向一個由父構(gòu)造函數(shù)所創(chuàng)建的實(shí)例,而不是指向構(gòu)造函數(shù)本身。

在這之后,創(chuàng)建Child對象時,會通過原型從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"

原型鏈的變化情況:

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

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

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

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

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

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

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

相關(guān)文章

最新評論

衢州市| 台北县| 双牌县| 中宁县| 霍州市| 凌云县| 合江县| 乌鲁木齐县| 香格里拉县| 南川市| 襄汾县| 东阳市| 安陆市| 安新县| 临猗县| 繁峙县| 北辰区| 临海市| 大宁县| 棋牌| 剑川县| 花莲县| 福泉市| 油尖旺区| 鲜城| 卫辉市| 海门市| 定南县| 东乌珠穆沁旗| 吴忠市| 嵊州市| 德兴市| 卫辉市| 成都市| 双柏县| 忻州市| 临澧县| 绍兴县| 嘉祥县| 三穗县| 达尔|