摘要:父類子類原理就是改變中的指向,指向的實(shí)例,子類會獲得父類的私有屬性和方法原型鏈繼承在中通過繼承到了父類的私有屬性和私有方法。子類私有繼承父類私有原理目前比較常用的是混合繼承和混合繼承,子類能很清晰的繼承父類的公有和私有。
前言:JS之理解原型和原型鏈,幾種常見的繼承方式介紹
1.call繼承,也叫借用構(gòu)造函數(shù)、偽造對象或是經(jīng)典繼承。call繼承回把父類的私有屬性和方法繼承給子類私有;父類公有屬性(原型上的屬性)無關(guān)。當(dāng)然這里的call也可以用apply。
//父類F //子類S function S(){ F.call(this) }//原理就是改變F中的this指向,指向S的實(shí)例,子類會獲得父類F的私有屬性和方法
2.原型鏈繼承:在1中通過call繼承到了父類的私有屬性和私有方法。下一步就是有共有屬性和方法。原型鏈繼承把父類私有和公有的屬性,都給了子類公有,子類的原型作為父類的實(shí)例。原型鏈繼承會使得父類的私有屬性在子類的私有和公有都得到繼承。
function S(){}; //把子類公有的作為父類的實(shí)例; S.prototype=new F; let s=new S;
3.冒充繼承:通過遍歷父類的屬性,把父類私有+公有的的屬性都給了子類私有。for in循環(huán),只能遍歷自定義的屬性和方法;拿不到系統(tǒng)的屬性和方法,例如constructor;
function S(){ for(var attr in f){ this[attr]=f[attr];}} let s=new S;
4.混合繼承1:call繼承+原型鏈繼承;子類私有中有父類私有的,子類公有也有父類私有;;
//子類私有繼承父類私有; function S(){ F.call(this)}; //子類公有繼承父類私有——公有 S.prototype=new F; let s=new S;
5.混合繼承2:call繼承+拷貝繼承(extend),通過extend方法遍歷父類原型上的方法,并復(fù)制給子類的原型。
//子類私有繼承父類私有; function S(){F.call(this);} //通過extend方法進(jìn)行拷貝繼承公有 extend(S.prototype, F.prototype); let s=new S; //extend方法 function extend(obj2,obj1){ for(var attr in obj1){ obj2[attr]=obj1[attr]}
6.混合繼承3:call繼承+Object.create(),這也是ES6里class繼承extends的原理,點(diǎn)這。
//子類私有繼承父類私有; function S(){F.call(this)} S.prototype = Object.create(F.prototype,{constructor:{value:S}}) //Object.create()原理 function Tmp(){}; Tmp.prototype= F.prototype; S.prototype=new Tmp; S.prototype.constructor=S; //********* let s=new S;
目前比較常用的是混合繼承2和混合繼承3,子類能很清晰的繼承父類的公有和私有。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84596.html
摘要:理解繼承在中對繼承有了更友好的方式。總的來說的的實(shí)質(zhì)和以前的繼承方式是一致的,但是有了更好的,更清晰的表現(xiàn)形式。 理解ES6繼承extends 1.在es6中對繼承有了更友好的方式。在下面的繼承中那到底在extends的時候做了什么,super()又是代表什么意思。 class People{ constructor(name, age) { this.name = name; ...
摘要:通常有這兩種繼承方式接口繼承和實(shí)現(xiàn)繼承。理解繼承的工作是通過調(diào)用函數(shù)實(shí)現(xiàn)的,所以是寄生,將繼承工作寄托給別人做,自己只是做增強(qiáng)工作。適用基于某個對象或某些信息來創(chuàng)建對象,而不考慮自定義類型和構(gòu)造函數(shù)。 一、繼承的概念 繼承,是面向?qū)ο笳Z言的一個重要概念。通常有這兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。 《JS高程》里提到:由于函數(shù)沒有簽名,...
摘要:原型鏈與繼承當(dāng)談到繼承時,只有一種結(jié)構(gòu)對象。如果對該圖不怎么理解,不要著急,繼續(xù)往下看基于原型鏈的繼承對象是動態(tài)的屬性包指其自己的屬性。當(dāng)使用操作符來作用這個函數(shù)時,它就可以被稱為構(gòu)造方法構(gòu)造函數(shù)。 原型鏈與繼承 當(dāng)談到繼承時,JavaScript 只有一種結(jié)構(gòu):對象。每個實(shí)例對象(object )都有一個私有屬性(稱之為proto)指向它的原型對象(prototype)。該原型對象也...
摘要:繼承繼承子類可以使用父類的所有功能,并且對這些功能進(jìn)行擴(kuò)展。類繼承父類父類添加共有方法子類繼承父類子類添加共有方法其中最核心的一句代碼是將原型指向了父類的原型對象。 繼承 繼承:子類可以使用父類的所有功能,并且對這些功能進(jìn)行擴(kuò)展。繼承的過程,就是從一般到特殊的過程。 類繼承 // 父類 var supperClass = function() { var id = 1; thi...
摘要:中的繼承有多少種方式去某度搜一下,說幾種的都有,看的頭暈眼花,還是云里霧里,于是就自己認(rèn)真理一下,寫一篇按照自己的理解來進(jìn)行的分類。 js中的繼承有多少種方式?去某度搜一下,說幾種的都有,看的頭暈眼花,還是云里霧里,于是就自己認(rèn)真理一下,寫一篇按照自己的理解來進(jìn)行的分類。 JS實(shí)現(xiàn)繼承的核心技術(shù)點(diǎn)無非幾種: 1: new 關(guān)鍵字 2: prototype 3: call、appl...
閱讀 2341·2023-04-25 14:29
閱讀 1466·2021-11-22 09:34
閱讀 2709·2021-11-22 09:34
閱讀 3396·2021-11-11 10:59
閱讀 1860·2021-09-26 09:46
閱讀 2231·2021-09-22 16:03
閱讀 1928·2019-08-30 12:56
閱讀 483·2019-08-30 11:12