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

首頁 > 語言 > JavaScript > 正文

JavaScript寄生組合式繼承實例詳解

2024-05-06 15:22:51
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript寄生組合式繼承。分享給大家供大家參考,具體如下:

其實《JavaScript高級程序設計》這本書中已經有完整代碼了,只要把代碼讀懂就知道這個繼承是怎么回事。

首先,在js中,給對象定義屬性有兩種方式:

//通過執行構造函數設置屬性function A(){  this.a = 1;}//通過原型設置屬性A.prototype.b = 1;

所以:

一個類Sub要繼承另一個類Super,需要繼承父類的prototype下的屬性,還要執行一下父類的構造函數。

即一個類Sub要繼承另一個類Super,既要通過原型鏈實現對原型屬性和方法的繼承,又要通過在子類構造函數內調用父類構造函數實現對實例屬性的繼承。

1. 繼承prototype下的屬性

上面可以看到,Super類的prototype下的屬性是沒有被繼承的,因此下面還需要繼承這一部分。

直接「=」肯定不行,因為Sub.prototype中修改屬性后,不能影響Super.prototype里面的對象,即不能Sub.prototype=Super.prototype

首先寫一個創建對象副本的方法

function object(o){  function A(){}  A.prototype = o  var ox = new A()  return ox}

上面的函數得到的對象ox,擁有了對象o的全部屬性(在原型鏈上),而修改ox的屬性,不會影響到o,相當于把o復制了一份。

原型式繼承就是上面的“object”函數,在很多類庫源碼中都能發現它的身影

簡單而言,原型式繼承就是不用實例化父類了,直接實例化一個臨時副本實現了相同的原型鏈繼承。(即子類的原型指向父類副本的實例從而實現原型共享)

tips:總所周知,原型鏈繼承是子類的原型指向父類的實例從而實現原型共享,而原型式繼承是子類的原型指向父類副本的實例從而實現原型共享。

ECMAScirpt 5通過新增Object.create()方法規范化了原型式繼承。

使用object方法,就可以將Super.prototype的屬性「復制」到Sub.prototype上了,當然這兒還需要修正一下constructor的指向。

function inherit(subType,superType){ var prototype=Object.create(superType.prototype); prototype.constructor=subType; subType.prototype=prototype;}

2. 分別執行父類和子類的構造函數,繼承這部分下的屬性:

//父類function Super(){this.sss=1}//子類function Sub(){//arguments是Sub收到的參數,將這個參數傳給SuperSuper.apply(this, arguments)}//實例sub = new Sub()

Super.apply(this, arguments)這一句,將Super類作為一個普通函數來執行,但是Super類的this被換成了Sub類的this,Sub收到的參數也傳給了Super

最后執行結果相當于sub.sss=1

附上各種繼承方式的特點和優缺點

曾經一段時間因為javascript關于類實現繼承的不規范,導致各種各樣實現繼承的代碼;而實際上不管代碼怎么變,繼承都基于兩種方式:

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

圖片精選

主站蜘蛛池模板: 印江| 雅安市| 中山市| 永宁县| 怀安县| 台中市| 平乐县| 曲阳县| 横峰县| 旬阳县| 仪陇县| 千阳县| 永平县| 家居| 门头沟区| 介休市| 平凉市| 西华县| 乌兰察布市| 江川县| 茌平县| 大邑县| 泗阳县| 固阳县| 高要市| 礼泉县| 昭苏县| 巢湖市| 普定县| 鹤庆县| 海丰县| 宣汉县| 长葛市| 微山县| 昌乐县| 塔河县| 上饶县| 上林县| 曲靖市| 化州市| 隆昌县|