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

