PassFront
  1. PassFront
  2. База знаний
  3. Классы

Какое знаешь наследование кроме классового?

Классы

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

Виды наследования

Прототипное (основа JS)

Объекты наследуют от других объектов через цепочку прототипов ([[Prototype]]):

const animal = { eat() {} };
const dog = Object.create(animal); // dog наследует от animal

class в JS — сахар над прототипным.

Классовое

Классы наследуют от классов (extends) — привычно из Java/C++; в JS это надстройка над прототипами.

Миксины (mixins)

Копирование методов из объектов-миксинов в класс/объект — способ «множественного наследования»:

Object.assign(MyClass.prototype, mixin1, mixin2);

Композиция (альтернатива наследованию)

Объект собирается из независимых частей вместо иерархии — часто предпочтительнее:

const withLogging = (obj) => ({ ...obj, log() {} });

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

Множественное наследование

Наследование от нескольких классов (C++, Python) — в JS нет напрямую, эмулируется миксинами.

Функциональное наследование

Через фабричные функции и замыкания.

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

Кроме классового наследования: прототипное (основа JS — объекты наследуют от объектов через [[Prototype]], Object.create; class — сахар над ним), миксины (копирование методов, эмуляция множественного наследования через Object.assign), композиция (сборка из частей — часто предпочтительнее наследования), множественное (в C++/Python, в JS через миксины), функциональное (фабрики + замыкания).

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