ES5的構(gòu)造函數(shù)和ES6的Class區(qū)別
- ES5的構(gòu)造函數(shù)的原型上的屬性和方法可以遍歷/ES6 不能夠遍歷
- ES6的類必須通過new調(diào)用,構(gòu)造函數(shù)則可以不用
- 類不存在變量提升
- ES6的類沒有私有方法和私有屬性(正在提議中)
- class多了一個靜態(tài)方法(static),里面的this指向的是類本身,靜態(tài)方法可以被子類繼承
- ES6的靜態(tài)屬性和靜態(tài)方法
- ES6 類多了一個new Target 可以判定new 的構(gòu)造函數(shù)
ES6的繼承
實質(zhì)區(qū)別
ES5的繼承是通過先創(chuàng)建子類的實例對象this,然后再將父類的屬性和方法添加到this上,ES6的實現(xiàn)有所不同,它是先創(chuàng)建父類的實例對象this(通過super方法),然后通過子類的構(gòu)造函數(shù)修改this。
在super方法調(diào)用前,不能使用this
-
靜態(tài)方法也會被子類繼承
class A { static hello() { console.log('hello') } } class B extends A { } B.hello() -
super關(guān)鍵字
-
作為函數(shù)的時候,代表父類的構(gòu)造函數(shù),ES6 規(guī)定,子類的構(gòu)造函數(shù)必須執(zhí)行一次super函數(shù)。并且只能在子類的構(gòu)造函數(shù)中使用,用在其他地方會報錯。
// 在子類中調(diào)用的時候,this指向的是子類的實例 super() ==> A.prototype.constructor.call(this) 作為對象的時候,在子類的普通方法中,代表父類的原型對象,在靜態(tài)方法中,代表父類
-