ES6的Class

類的基本寫法:函數

  

  

  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。

  像這樣是錯誤的:

   

相關文章
相關標籤/搜索