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

Что такое прототипное наследование?

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

Прототипное наследование — это механизм, при котором объекты получают свойства и методы от других объектов через цепочку прототипов, а не через классы (как в классических ООП-языках).

Как это работает

Каждый объект имеет ссылку на прототип ([[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 — синтаксический сахар над этим механизмом.

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