JavaScript中的super
關鍵字
在JavaScript中使用類別時,使用super
關鍵字是很常見的。
在本文中,我想要澄清它的用途。
假設我們有一個名為Car
的類別:
1 | class Car { |
並且在這個類別中,我們有一個constructor()
方法:
1 | class Car { |
這個constructor方法是特別的,因為它在類別被實例化時被執行:
1 | const myCar = new Car() //'這是一輛汽車' |
你可以有一個Tesla
類別,它擴展了Car
類別:
1 | class Tesla extends Car { |
Tesla
類別繼承了Car
的所有方法和屬性,包括constructor
方法。
我們可以創建一個Tesla
類別的實例,創建一個新的myCar
物件:
1 | const myCar = new Tesla() |
原本在Car
中的constructor仍然會被執行,因為Tesla
類別沒有自己的constructor。
我們可以在Tesla
類別中覆寫constructor()
方法:
1 | class Tesla extends Car { |
和
1 | const myCar = new Tesla() |
會印出這是一輛特斯拉
。
在constructor()
方法中,我們也可以呼叫super()
來調用父類別中的同名方法:
1 | class Tesla extends Car { |
呼叫
1 | const myCar = new Tesla() |
現在會執行2個console log。首先是在Car類別constructor中定義的,第二個是在Tesla類別constructor中定義的:
1 | '這是一輛汽車' |
請注意,super()
只能在constructor中呼叫,不能在其他方法中使用。
如果constructor接受參數,我們也可以傳入任意參數。