← Назад к вопросам
Через какое ключевое слово наследуются классы
1.6 Junior🔥 201 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Наследование классов в JavaScript
Наследование классов в JavaScript реализуется через ключевое слово extends.
Синтаксис extends
class Parent {
constructor(name) {
this.name = name;
}
greet() {
return `Привет, ${this.name}!`;
}
}
// Дочерний класс наследует от родительского
class Child extends Parent {
constructor(name, age) {
super(name); // вызов конструктора родителя
this.age = age;
}
greet() {
return `${super.greet()} Мне ${this.age} лет.`;
}
}
const child = new Child('Иван', 10);
console.log(child.greet()); // Привет, Иван! Мне 10 лет.
Ключевое слово super()
super() вызывает конструктор родительского класса и обязателен при переопределении конструктора:
class Animal {
constructor(name) {
this.name = name;
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // передаем аргументы в родительский конструктор
this.breed = breed;
}
}
const dog = new Dog('Рекс', 'Лабрадор');
console.log(dog.name); // Рекс
console.log(dog.breed); // Лабрадор
Переопределение методов
class Vehicle {
start() {
return 'Транспорт запущен';
}
}
class Car extends Vehicle {
start() {
return 'Машина запущена';
}
}
const car = new Car();
console.log(car.start()); // Машина запущена
Вызов методов родителя через super
class Person {
constructor(name) {
this.name = name;
}
introduce() {
return `Я ${this.name}`;
}
}
class Student extends Person {
constructor(name, grade) {
super(name);
this.grade = grade;
}
introduce() {
// вызываем метод родителя через super
return `${super.introduce()}, я студент ${this.grade} класса`;
}
}
const student = new Student('Анна', 10);
console.log(student.introduce());
// Я Анна, я студент 10 класса
Множественное наследование (не поддерживается)
JavaScript не поддерживает множественное наследование напрямую:
// ❌ Это НЕ работает
class Child extends Parent1, Parent2 {}
// ✅ Вместо этого используй composition (композицию)
class Child {
constructor() {
this.parent1 = new Parent1();
this.parent2 = new Parent2();
}
}
Статические методы и наследование
class Parent {
static info() {
return 'Я родитель';
}
}
class Child extends Parent {
static info() {
return `${super.info()} и у меня есть дети`;
}
}
console.log(Child.info()); // Я родитель и у меня есть дети
Проверка наследования (instanceof)
class Animal {}
class Dog extends Animal {}
const dog = new Dog();
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(dog instanceof Object); // true
Цепочка прототипов
class A {
methodA() { return 'A'; }
}
class B extends A {
methodB() { return 'B'; }
}
class C extends B {
methodC() { return 'C'; }
}
const c = new C();
console.log(c.methodA()); // A — из класса A
console.log(c.methodB()); // B — из класса B
console.log(c.methodC()); // C — из класса C
Важные правила
- super() должен быть вызван ДО использования this в конструкторе дочернего класса
- Дочерний класс может переопределять методы родителя
- Используй super.method() для вызова методов родителя
- JavaScript поддерживает однослойное наследование (extends только один класс)
- Для сложной логики вместо наследования лучше использовать composition (композицию)
Рекомендации
✅ Используй extends когда:
- Есть четкая иерархия (Student extends Person)
- Нужно переопределить методы родителя
- Дочерний класс расширяет функциональность родителя
❌ Не используй extends когда:
- Нужна сложная логика (используй композицию)
- Нужно наследовать от множества классов
- Логика может измениться (используй interfaces и типы)
Ключевое слово extends — это основной инструмент для построения иерархии классов в JavaScript.