Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: prototype, inheritance, new operator, constructor function, __proto__

Как работает механизм прототипного наследования при создании объекта через new?

Вопрос проверяет понимание механизма прототипного наследования в JavaScript, которое является основой для создания объектов и реализации ООП.

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

При вызове функции с оператором `new` создаётся новый пустой объект. Ссылка `this` внутри функции связывается с этим новым объектом. Затем внутреннее свойство `[[Prototype]]` (доступное как `__proto__`) этого объекта устанавливается на объект `prototype` функции-конструктора. Если функция не возвращает свой объект, оператор `new` автоматически возвращает вновь созданный объект, который теперь имеет доступ ко всем свойствам и методам, определённым в `prototype` конструктора.

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

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

Шаги работы оператора new

Когда функция вызывается с оператором new, происходит следующая последовательность действий:

  1. Создаётся новый пустой объект.
  2. Этот объект связывается со свойством prototype функции-конструктора. Технически, внутреннее свойство [[Prototype]] нового объекта (доступное через __proto__) устанавливается равным объекту Constructor.prototype.
  3. Контекст выполнения this внутри функции-конструктора привязывается к этому новому объекту.
  4. Выполняется тело функции-конструктора (обычно оно добавляет свойства к this).
  5. Если функция не возвращает явно другой объект, оператор new автоматически возвращает вновь созданный объект.

Пример кода

Рассмотрим создание объекта через конструктор и доступ к методам через цепочку прототипов.

// Функция-конструктор
function Animal(name) {
    this.name = name;
}

// Добавляем метод в прототип конструктора
Animal.prototype.sayName = function() {
    console.log('My name is ' + this.name);
};

// Создаём экземпляр с помощью new
const cat = new Animal('Whiskers');

// Метод доступен через цепочку прототипов
cat.sayName(); // Выведет: My name is Whiskers

// Проверяем связь прототипа
console.log(cat.__proto__ === Animal.prototype); // true
console.log(cat instanceof Animal); // true

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

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

Вывод: Механизм прототипного наследования через new — это основа объектно-ориентированного программирования в JavaScript. Его стоит применять при создании множества однотипных объектов, где нужно экономить память, вынося методы в прототип, или при работе с legacy-кодом, написанным до ES6.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

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

#prototype

#inheritance

#new operator

#constructor function

#__proto__

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