ES6-Class的繼承

1、基本語法

  • ES6中的繼承直接通過extends關鍵字來實現(xiàn)繼承;
  • 子類的constructor中必須顯示調(diào)用super()方法。
class A {}
class B extends A {
  constructor () {
    super();
  }
}

在子類的constructor中調(diào)用了super()方法之后,才會生成子類的this對象。
因此,this對象的使用只能放在super()方法之后調(diào)用。

2、使用Object.getPrototypeOf()獲取子類的父類

Object.getPrototypeOf(B) === A // true

3、super關鍵字的使用

super關鍵字有兩種使用方法:

  • 作為super方法來調(diào)用,生成子類實例并實現(xiàn)繼承;代表父類的構(gòu)造函數(shù);
    注意,super雖然代表了父類A的構(gòu)造函數(shù),但是返回的是子類B的實例;
    即super內(nèi)部的this指的是B的實例;
    作為 #函數(shù)# 時,super()只能用在子類的構(gòu)造函數(shù)之中,用在其他地方(比如實例方法)就會報錯。

    image.png

  • 作為super對象來使用, 代表父類對象
    super作為對象在普通方法或者constructor中使用時,指向父類的原型對象;
    因此在普通方法或者constructor中,是無法通過super對象來調(diào)用父類實例上的屬性和方法的

    image.png

image.png

super作為對象在靜態(tài)方法中使用時,指向父類;

image.png

在子類的靜態(tài)方法中通過super調(diào)用父類的方法時,方法內(nèi)部的this指向當前的子類,而不是子類的實例

image.png

由于對象總是繼承其他對象的,所以可以在任意一個對象中,使用super關鍵字

image.png

4、類的 prototype 屬性和proto屬性

記住兩條規(guī)則即可:

  • 子類的proto屬性,表示構(gòu)造函數(shù)的繼承,指向父類(因為class語法表示的是構(gòu)造函數(shù),而函數(shù)自帶prototype屬性)
    B.__proto__ === A
  • 子類的prototype的proto屬性,表示方法的繼承,指向父類的prototype(因為class內(nèi)部的方法都是定義在原型上的)
    B.prototype.__proto__ === A.prototype
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Classk可以通過extends關鍵字實現(xiàn)繼承;這比ES5的通過修改原型鏈實現(xiàn)繼承,要清晰和方便很多; 上面的代...
    吳高亮閱讀 1,978評論 0 1
  • 簡介 Class可以通過extends關鍵字實現(xiàn)繼承。 上面代碼定義了一個ColorPoint類,該類通過exte...
    oWSQo閱讀 755評論 0 1
  • 繼承6種套餐 參照紅皮書,JS繼承一共6種 1.原型鏈繼承 核心思想:子類的原型指向父類的一個實例 Son.pro...
    燈不梨喵閱讀 3,251評論 1 2
  • 簡介 Class 可以通過extends關鍵字實現(xiàn)繼承,這比 ES5 的通過修改原型鏈實現(xiàn)繼承,要清晰和方便很多。...
    emmet7life閱讀 401評論 0 0
  • 基本語法 簡介 JavaScript語言中,生成實例對象的傳統(tǒng)方法是通過構(gòu)造函數(shù). ES6提供更接近傳統(tǒng)語言的寫法...
    JarvanZ閱讀 939評論 0 0

友情鏈接更多精彩內(nèi)容