Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что произойдет при обращении к атрибуту, которого нет у объекта, но он есть у родителя?

Вопрос проверяет понимание цепочки прототипов в JavaScript и механизма поиска свойств при обращении к объекту.

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

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

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

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

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

Рассмотрим пример с конструктором и прототипом:

function Animal(name) {
  this.name = name;
}

Animal.prototype.speak = function() {
  console.log(this.name + ' makes a sound.');
};

const dog = new Animal('Rex');

// Обращение к свойству, которого нет у dog, но есть у прототипа
console.log(dog.speak); // Функция будет найдена в Animal.prototype
dog.speak(); // Выведет: "Rex makes a sound."

// Обращение к несуществующему свойству
console.log(dog.color); // undefined, так как его нет ни в dog, ни в цепочке

Практическое применение

Цепочка прототипов используется для реализации наследования в JavaScript, позволяя повторно использовать код и создавать иерархии объектов. Например, встроенные объекты, такие как массивы или строки, имеют методы (например, `Array.prototype.map`), доступные через прототипы. Это также основа для классов ES6, которые являются синтаксическим сахаром над прототипным наследованием.

Важно понимать, что если свойство найдено в цепочке, оно используется, как если бы оно принадлежало самому объекту, с контекстом `this`, установленным на исходный объект. Однако, если свойство только читается, это прозрачно для кода. При записи свойства (например, `dog.speak = 'bark'`) оно создаётся в самом объекте, не затрагивая прототип — это называется "затенением" (shadowing).

Вывод: Цепочка прототипов — это мощный механизм JavaScript для наследования и повторного использования кода; он автоматически позволяет объектам получать доступ к свойствам родительских объектов, что упрощает создание сложных иерархий и экономит память.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#prototype chain

#inheritance

#object property

#JavaScript

#prototype lookup

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.