Ключевое слово super
можно использовать только внутри класса, но не снаружи.Технически возможно вызвать метод Car
printModel
напрямую, но этого действительно следует избегать.Весь смысл переопределения метода в суперклассе (например, printModel
) состоит в том, чтобы дать ему реализацию, более подходящую для подкласса.Таким образом, обход этого признака является неправильным дизайном ОО.
Однако для образовательных целей я считаю, что было бы полезно узнать, как это можно технически сделать, поскольку оно показывает, как классы JS действительно все еще используют прототипы вкапот:
Car.prototype.printModel.call(bmw)
Один из способов улучшить дизайн, чтобы избежать этого, состоит в добавлении необязательного аргумента для указания способа печати модели:
class BMW extends Car{
constructor(model, color){
super(model)
this.color = color
}
printModel(includeColor){
if (includeColor) {
console.log(this.model, this.color)
}
else super.printModel()
}
}