← Назад ко всем вопросам

Разница между свойствами __proto__ и prototype

1️⃣ Как кратко ответить

__proto__ — это свойство каждого объекта, указывающее на его прототип, от которого он наследует свойства и методы. prototype — это свойство функции-конструктора, которое используется для создания прототипа новых объектов, создаваемых этой функцией.

2️⃣ Подробное объяснение темы

В JavaScript прототипное наследование позволяет объектам наследовать свойства и методы от других объектов. Это достигается через использование свойств __proto__ и prototype.

__proto__

  • Что это такое: __proto__ — это внутреннее свойство объекта, которое указывает на его прототип. Это свойство используется для поиска свойств и методов, которые не найдены непосредственно в объекте.
  • Как работает: Когда вы обращаетесь к свойству объекта, JavaScript сначала ищет его в самом объекте. Если свойство не найдено, поиск продолжается в объекте, на который указывает __proto__, и так далее вверх по цепочке прототипов.
  • Пример использования:
const animal = {
  eats: true
};
​
const rabbit = {
  jumps: true
};
​
rabbit.__proto__ = animal;
​
console.log(rabbit.eats); // true

В этом примере объект rabbit наследует свойство eats от объекта animal через __proto__.

prototype

  • Что это такое: prototype — это свойство функции-конструктора, которое используется для создания прототипа новых объектов, создаваемых этой функцией. Все объекты, созданные с помощью функции-конструктора, будут иметь ссылку на этот прототип.
  • Как работает: Когда вы создаете новый объект с помощью функции-конструктора, JavaScript автоматически устанавливает __proto__ нового объекта на prototype функции-конструктора.
  • Пример использования:
function Animal() {}
​
Animal.prototype.eats = true;
​
const rabbit = new Animal();
​
console.log(rabbit.eats); // true

В этом примере Animal — это функция-конструктор. Свойство eats добавляется в Animal.prototype, и все объекты, созданные с помощью new Animal(), будут иметь доступ к этому свойству через цепочку прототипов.

Зачем это нужно

Прототипное наследование позволяет эффективно делиться функциональностью между объектами, избегая дублирования кода. Это особенно полезно в больших приложениях, где множество объектов могут иметь общие методы и свойства. Использование __proto__ и prototype позволяет создавать гибкие и расширяемые архитектуры, где изменения в прототипе автоматически отражаются на всех объектах, которые его наследуют.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки