一:什么時候要用constructor,需要定義state的時候必須要寫,要調用super(),而且要傳入props參數即super(props)。如果不定義state的話,有無constructor沒區別。
二:什么時候要調用super,如果要在子類中使用父類的屬性和方法,就要調用super(父類接受的參數),即要在constructor中使用this.props的時候就必須要調用super(props)。
例如:
constructor(){ super(); //沒有用到this.props所以參數props就可以不加 this.state={ //定義了state必須要寫constructor,必須調用super list:['aaa', 'bbb', 'ccc'] } }
三:可以不寫constructor,但是只要寫了constructor就必須要有super。為什么?這是因為子類自己的this對象,必須先通過父類的構造函數完成塑造,得到與父類同樣的實例屬性和方法,然后對其進行加工,加上子類自己的實例屬性和方法。如果不調用super方法,子類就得不到this對象。
四:為什么可以省略,由於ES6的繼承規則,不管子類寫不寫constructor,在new實例的過程都會自動給補上constructor。
注意:子類必須在constructor方法中調用super方法,否自新建實例時會報錯。這是因為子類自己的this對象,必須先通過父類的構造函數完成塑造,得到父類同樣的實例屬性和方法,然后再對其進行加工,加上子類自己的屬性和方法。如果不調用super方法,子類就得不到this對象。