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

Что такое прототип?

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

Прототип (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 — Прототипы

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