Что такое прототип?
Объекты и прототипы
Прототип (prototype) — это объект, от которого другой объект наследует свойства и методы. Это основа наследования в JavaScript.
Как работает
У каждого объекта есть внутренняя ссылка [[Prototype]] (доступна как __proto__) на его прототип. При обращении к свойству движок ищет его сначала в самом объекте, затем в прототипе, затем в прототипе прототипа — по цепочке прототипов, пока не дойдёт до null.
const animal = {
eat() {
return 'ест';
},
};
const dog = Object.create(animal);
dog.bark = () => 'гав';
dog.bark(); // 'гав' — своё
dog.eat(); // 'ест' — из прототипаprototype у функций
У функций-конструкторов есть свойство prototype — объект, который станет прототипом для экземпляров, созданных через new.
function User(name) {
this.name = name;
}
User.prototype.greet = function () {
return `Привет, ${this.name}`;
};
const u = new User('Ann');
u.greet(); // метод найден в User.prototypeЗачем это нужно
Методы хранятся в прототипе один раз, а не копируются в каждый экземпляр — экономия памяти. class — синтаксический сахар над прототипами.
Коротко для собеседования
Прототип — объект, от которого наследуются свойства через цепочку [[Prototype]]. Поиск свойства идёт вверх по цепочке до null. Методы в прототипе общие для всех экземпляров; class — сахар над этим механизмом.
Подробнее: learn.javascript.ru — Прототипы