PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Зачем нужно наследование?

Объекты и прототипы

Наследование нужно для переиспользования кода и построения иерархий: класс-потомок получает свойства и методы родителя, расширяя или переопределяя их, без дублирования.

Зачем нужно

Переиспользование кода

Общая логика — в родителе, потомки её наследуют без копирования:

class Animal {
  constructor(name) { this.name = name; }
  eat() { return `${this.name} ест`; }
}
class Dog extends Animal {
  bark() { return 'Гав'; }  // + своё, eat() унаследован
}

Иерархия и моделирование

Естественно моделировать «is-a» отношения (собака — это животное).

Полиморфизм

Потомки переопределяют методы, работая через общий интерфейс:

class Cat extends Animal {
  eat() { return `${super.eat()} рыбу`; } // переопределение
}

Расширяемость

Добавить новый тип — создать потомка, не меняя родителя (Open-Closed).

Механизм в JS

extends + super; под капотом — прототипное наследование (class — сахар).

Осторожно — композиция часто лучше

Глубокие иерархии хрупки (изменение родителя ломает потомков, жёсткая связанность). Часто предпочитают композицию — собирать объект из независимых частей:

> «Предпочитай композицию наследованию»

Коротко для собеседования

Наследование нужно для переиспользования кода (общая логика в родителе), моделирования иерархий («is-a»), полиморфизма (переопределение методов) и расширяемости (новый потомок без изменения родителя). В JS — extends/super над прототипами. Но глубокие иерархии хрупки — часто предпочитают композицию.

Другие вопросы раздела