Что такое прототипное наследование?
Объекты и прототипы
Прототипное наследование — это механизм, при котором объекты получают свойства и методы от других объектов через цепочку прототипов, а не через классы (как в классических ООП-языках).
Как это работает
Каждый объект имеет ссылку на прототип ([[Prototype]]). Если свойство не найдено в самом объекте, поиск продолжается в прототипе, затем в прототипе прототипа — до null. Это и есть цепочка прототипов.
const animal = {
eat() {
return `${this.name} ест`;
},
};
const dog = Object.create(animal);
dog.name = 'Рекс';
dog.eat(); // 'Рекс ест' — метод унаследованЧерез конструкторы
function Animal(name) {
this.name = name;
}
Animal.prototype.eat = function () {
return `${this.name} ест`;
};
function Dog(name) {
Animal.call(this, name); // наследуем поля
}
Dog.prototype = Object.create(Animal.prototype); // наследуем методы
Dog.prototype.constructor = Dog;Через class (современный синтаксис)
class Animal {
constructor(name) { this.name = name; }
eat() { return `${this.name} ест`; }
}
class Dog extends Animal {}class и extends — сахар над прототипным наследованием.
Плюсы
- Методы хранятся в прототипе один раз (экономия памяти).
- Гибкость: прототип можно менять во время выполнения.
Коротко для собеседования
Объекты наследуют не от классов, а от других объектов через цепочку прототипов. Поиск свойства идёт вверх до null. class/extends — синтаксический сахар над этим механизмом.