用ES6解決ES5中原型、構造、繼承三大難題
阿新 • • 發佈:2019-01-12
ES6中新加入的三個特性 class、extends、 super
這三個特性涉及了ES5中最令人頭疼的原型、構造和繼承。解決了ES5中晦澀難懂的語法和亂七八糟的指標。
class Animal { constructor(){ this.type = 'animal' } says(say){ console.log(this.type + ' says ' + say) } } let animal = new Animal() animal.says('hello') //animal says hello class Cat extends Animal { constructor(){ super() this.type = 'cat' } } let cat = new Cat() cat.says('hello') //cat says hello
上面程式碼首先用class
定義了一個“類”,可以看到裡面有一個constructor
方法,這就是構造方法,而this
關鍵字則代表例項物件。簡單地說,constructor
內定義的方法和屬性是例項物件自己的,而constructor
外定義的方法和屬性則是所有例項物件可以共享的。
Class之間可以通過extends
關鍵字實現繼承,這比ES5的通過修改原型鏈實現繼承,要清晰和方便很多。上面定義了一個Cat類,該類通過extends
關鍵字,繼承了Animal類的所有屬性和方法。
super關鍵字,它指代父類的例項(即父類的this物件)。子類必須在constructor
方法中呼叫super
ES6的繼承機制,實質是先創造父類的例項物件this(所以必須先呼叫super方法),然後再用子類的建構函式修改this。