← Назад к вопросам

Через какую конструкцию можно вызвать метод родителя в дочернем классе

1.6 Junior🔥 131 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ключевое слово super

В JavaScript и TypeScript для вызова методов родительского класса используется конструкция super. Это встроенное ключевое слово, которое предоставляет доступ к методам и свойствам базового класса.

Использование super с методами

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(`${this.name} makes a sound`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);  // вызов конструктора родителя
    this.breed = breed;
  }
  
  speak() {
    super.speak();  // вызов метода родителя
    console.log(`${this.name} barks`);
  }
}

const dog = new Dog('Rex', 'Labrador');
dog.speak();

Обязательное использование super в конструкторе

Если дочерний класс имеет конструктор, то super() ОБЯЗАТЕЛЬНО должен быть вызван перед использованием this:

class Parent {
  constructor(value) {
    this.value = value;
  }
}

class Child extends Parent {
  constructor(value, extra) {
    super(value);  // ОБЯЗАТЕЛЬНО!
    this.extra = extra;  // теперь this доступен
  }
}

super с getters и setters

class Base {
  get name() {
    return 'Base';
  }
}

class Derived extends Base {
  get name() {
    return super.name + ' Derived';
  }
}

const obj = new Derived();
console.log(obj.name);

Важные ограничения

  1. super может использоваться ТОЛЬКО в классах
  2. super() в конструкторе должен быть вызван ДО любого использования this
  3. super работает с наследованием через extends
  4. Статические методы также могут использовать super

Практический пример с TypeScript

class Controller {
  protected handleError(error: Error): void {
    console.error('Base error handling:', error.message);
  }
}

class ApiController extends Controller {
  protected handleError(error: Error): void {
    super.handleError(error);
    this.logToService(error);
  }
  
  private logToService(error: Error): void {
    console.log('Logging to service...');
  }
}

Super — универсальный способ работы с наследованием в современном JavaScript.