国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

簡單談談javascript代碼復用模式

2024-05-06 16:15:28
字體:
來源:轉載
供稿:網友
這篇文章主要簡單談談javascript代碼復用模式,主要詳細介紹了類式繼承模式中的默認模式,希望大家能夠喜歡。
 

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

類式繼承模式-默認模式

兩個構造函數Parent和Child的例子:

 

復制代碼代碼如下:

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

 

下面是可復用繼承函數inherit()的一種實現方法:

 

復制代碼代碼如下:

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

 

這里原型屬性應該指向一個對象,而不是一個函數,因此他必須指向一個由父構造函數所創建的實例,而不是指向構造函數本身。

在這之后,創建Child對象時,會通過原型從Parent實例獲得他的功能:

 

復制代碼代碼如下:

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

 

調用繼承之后的原型鏈:

進一步添加kid的屬性:

 

復制代碼代碼如下:

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

 

原型鏈的變化情況:

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

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

另外一個缺點,使用inherit()繼承不支持將參數傳遞給子構造函數中,例如:

 

復制代碼代碼如下:

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

 

這個結果并不是期望的,雖然子構造函數可以將參數傳遞到父構造函數中,但是這樣每次需要一個子對象時,都必須重新執行這種繼承機制,而且效率低下,原因是最終會重新創建父對象。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 江源县| 威宁| 色达县| 五莲县| 阿勒泰市| 公主岭市| 奉化市| 高阳县| 合川市| 高唐县| 三亚市| 石林| 镇雄县| 台东市| 攀枝花市| 海林市| 泰顺县| 阿巴嘎旗| 闵行区| 黑河市| 高唐县| 蒲城县| 揭西县| 西乌珠穆沁旗| 额济纳旗| 嘉祥县| 甘德县| 农安县| 县级市| 根河市| 中方县| 新龙县| 三原县| 理塘县| 湖口县| 黑龙江省| 南漳县| 博客| 榆社县| 南川市| 临泽县|