Когда мы работаем с классами в JavaScript, обычно используется ключевое слово super .
В этом посте я хочу пояснить, для чего это полезно.
Предположим, у вас есть класс Автомобиль :
class Car {
}и в этом классе у нас есть метод конструктор() :
class Car {
constructor() {
console.log('This is a car')
}
}Метод конструктора является особенным, поскольку он выполняется при создании экземпляра класса:
const myCar = new Car() //'This is a car'
У вас может быть класс Tesla , который расширяет класс Car :
class Tesla extends Car {
}Класс Tesla унаследовал все методы и свойства Car , включая метод конструктор .
Мы можем создать экземпляр класса Tesla , создав новый объект myCar :
const myCar = new Tesla()
И оригинальный конструктор в Car все еще выполняется, потому что у Tesla нет своего собственного.
Мы можем переопределить метод конструктор() в классе Тесла :
class Tesla extends Car {
constructor() {
console.log('This is a Tesla')
}
}и
const myCar = new Tesla()
будет печатать Это Тесла .
В методе конструктор() мы также можем вызвать супер() для вызова того же метода в родительском классе:
class Tesla extends Car {
constructor() {
super()
console.log('This is a Tesla')
}
}Зовущий
const myCar = new Tesla()
теперь будет выполняться 2 журнала консоли. Первый – тот, который определен в конструкторе класса Car, второй – тот, который определен в конструкторе класса Tesla:
'This is a car' 'This is a Tesla'
Обратите внимание, что super() может вызываться только в конструкторе, а не в других методах.
И мы можем передать любой параметр, если конструктор принимает параметры.
Оригинал: “https://flaviocopes.com/javascript-super/”