Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: prototype chain, property lookup, inheritance, JavaScript object, __proto__

Как происходит поиск свойства по цепочке прототипов?

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

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

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

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

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

Как работает поиск

Процесс происходит следующим образом:

  1. Движок проверяет, существует ли свойство в самом объекте (его собственные свойства).
  2. Если нет, он переходит к прототипу объекта (через свойство __proto__ или Object.getPrototypeOf()).
  3. Поиск продолжается рекурсивно по цепочке прототипов, пока свойство не будет найдено.
  4. Если конец цепочки достигнут (прототип равен null), возвращается undefined.

Пример кода

Рассмотрим простую иерархию:

// Базовый объект-прототип
const animal = {
  eats: true,
  walk() {
    console.log('Animal walks');
  }
};

// Создаём объект, наследующий от animal
const rabbit = {
  jumps: true,
  __proto__: animal // Устанавливаем прототип
};

// rabbit наследует свойства animal
console.log(rabbit.eats); // true, свойство найдено в прототипе
console.log(rabbit.jumps); // true, собственное свойство
rabbit.walk(); // 'Animal walks', метод найден в прототипе

// Поиск по цепочке: если свойства нет
console.log(rabbit.nonExistent); // undefined, цепочка: rabbit -> animal -> Object.prototype -> null

Где применяется

Цепочка прототипов лежит в основе наследования в JavaScript. Она используется:

  • В классическом прототипном наследовании до появления классов ES6.
  • Встроенные объекты (например, массивы, строки) наследуют методы от своих прототипов (Array.prototype, String.prototype).
  • При создании пользовательских иерархий объектов для повторного использования кода.

Важно понимать, что изменение прототипа динамически влияет на все объекты, которые его наследуют, что может быть как мощным инструментом, так и источником ошибок.

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#prototype chain

#property lookup

#inheritance

#JavaScript object

#__proto__

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию