Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: arrow function, constructor, new, prototype, this

Почему стрелочные функции нельзя использовать как конструкторы?

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

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

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

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

Почему стрелочные функции не работают как конструкторы?

Стрелочные функции в JavaScript были введены в стандарте ES6 как более лаконичный синтаксис для написания функций. Однако они имеют принципиальные отличия от обычных функций, одно из которых — невозможность использования в качестве конструктора.

Отсутствие собственного this

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

Отсутствие prototype

У стрелочных функций нет свойства prototype. Обычные функции, используемые как конструкторы, имеют свойство prototype, которое содержит методы и свойства, наследуемые экземплярами. Без prototype стрелочная функция не может передавать методы создаваемым объектам.

Пример кода

// Обычная функция-конструктор работает
function RegularConstructor(name) {
  this.name = name;
}
const obj1 = new RegularConstructor('Alice');
console.log(obj1.name); // Alice

// Стрелочная функция не может быть конструктором
const ArrowConstructor = (name) => {
  this.name = name;
};
// const obj2 = new ArrowConstructor('Bob'); // TypeError: ArrowConstructor is not a constructor

// Проверка наличия prototype
console.log(RegularConstructor.prototype); // {constructor: ƒ}
console.log(ArrowConstructor.prototype); // undefined

Вывод

Стрелочные функции предназначены для кратких выражений и сохранения контекста this из внешней области. Их не следует использовать там, где требуется создание новых объектов с помощью new. Для конструкторов всегда применяйте обычные функции или классы.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#arrow function

#constructor

#new

#prototype

#this

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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