Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

В каком порядке происходит поиск свойства у объекта?

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

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

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

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

Когда вы пытаетесь получить доступ к свойству объекта (например, obj.property), JavaScript выполняет поиск по определённому алгоритму, известному как "поиск по цепочке прототипов" (prototype chain). Этот механизм лежит в основе прототипного наследования в языке.

Шаги поиска свойства

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

Пример кода

Рассмотрим простой пример, демонстрирующий цепочку:

// Создаём объект-прототип
const animal = {
  eats: true
};

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

// Устанавливаем прототип
Object.setPrototypeOf(rabbit, animal);

// Поиск свойства:
console.log(rabbit.jumps); // 1. Своё свойство -> true
console.log(rabbit.eats);  // 2. Не своё, ищет в animal -> true
console.log(rabbit.runs);  // 3. Не найдено нигде -> undefined

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

Цепочка прототипов используется повсеместно в JavaScript: при создании классов через class, при наследовании методов встроенных объектов (например, массивы наследуют методы от Array.prototype), а также в различных фреймворках для реализации миксинов или декораторов. Понимание этого порядка помогает избежать ошибок, когда свойства переопределяются случайно, и позволяет эффективно использовать наследование.

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#prototype chain

#property lookup

#object

#JavaScript

#inheritance

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