Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: наследование, прототипы, __proto__

Объясните концепцию прототипного наследования в JavaScript?

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

Короткий ответ

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

Длинный ответ

Прототипное наследование — это ключевая концепция в JavaScript, позволяющая объектам наследовать свойства и методы от других объектов через так называемую цепочку прототипов (prototype chain). Когда вы пытаетесь получить доступ к свойству или методу объекта, JavaScript сначала проверяет, существует ли оно у самого объекта. Если нет, движок JavaScript переходит к прототипу этого объекта и проверяет там. Этот процесс продолжается по цепочке до тех пор, пока не будет найдено нужное свойство или не закончится цепочка прототипов.

Каждый объект в JavaScript имеет скрытое свойство [[Prototype]], доступное через __proto__, которое ссылается на его прототип — объект, от которого он наследует. Если объекту нужно иметь доступ к определённым методам или свойствам, их можно добавить к его прототипу, и все объекты, наследующие от него, получат к ним доступ.

Пример:

const animal = {
	speak() {    
		console.log('Animal speaks');    
	} 
}; 
const dog = {
	bark() {     
		console.log('Dog barks');    
	} 
}; // Устанавливаем animal как прототип для dog 
dog.__proto__ = animal; // Теперь dog может использовать метод speak 
dog.speak(); // 'Animal speaks'

Когда мы вызываем dog.speak(), JavaScript сначала проверяет, есть ли у объекта dog метод speak. Не найдя его, движок обращается к прототипу объекта dog, который ссылается на объект animal, где этот метод и найден.

Цепочка прототипов позволяет экономить память, так как методы и свойства не дублируются на каждом объекте, а наследуются через прототипы.

Уровень

  • Рейтинг:

    4

  • Сложность:

    9

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#наследование

#прототипы

#__proto__

Подпишись на React Developer в телеграм