類的基本寫法:函數
constructor構造函數其實就至關於ES5中的構造函數,用於定義類的實例屬性;this
而在類中定義的其餘方法像這裏的toString方法就至關於ES5中定義在原型prototype上的共享方法。spa
就是語法糖嘛。prototype
constructor方法對象
這是類的默認方法,類必須有該方法,若是沒有顯示定義,會默認添加一個空的constructor方法。blog
Class的表達式寫法繼承
const Father = class Me{} 原型鏈
其中Me在Class的內部使用,指代當前類,也能夠省略掉原型
const Father = class{}class
當即執行的class表達式
不存在變量提高
和let、const這些新增的變量同樣,class也是不存在變量提高的,因此必須在定義以後纔可使用該類。並且也不能夠重複定義。
class的繼承
經過使用extends關鍵字實現繼承。這就比ES5寫起來簡單多了,ES5中要實現繼承,得把超集的實例賦給子集的prototype,也就是經過原型鏈實現。
這樣子,Son類經過extends繼承了Father類的全部屬性和方法,至關於複製了一個Father類。
上面沒有顯式聲明constructor方法,實際上是會默認添加constructor方法,並且裏面會調用super函數,至關於下面這樣:
也就是說,子類必須在constructor函數中調用super()函數,至關於調用父類的constructor方法,不然在新建實例的時候會出錯。
這是由於子類沒有本身的this對象,而是經過繼承父類的this對象,而後進行修改。Super()函數至關於調用父類的constructor函數,創造了父類的實例對象this,而後就能夠用子類的構造函數修改它了。
當就是不調用它的時候
就會報錯!
完整的繼承寫法是這個樣子:
還要注意,super()函數調用後,子類纔可使用this對象,不然也是會出錯的,由於只有調用super()以後,才返回了父類的實例,纔可使用this。
像這樣是錯誤的: