Проверяет понимание отличий стрелочных функций от обычных, особенно в контексте вызова через new и работы с this.
Стрелочные функции появились в ES6 как компактный синтаксис и как способ сохранить лексический this из окружающего контекста. Именно эта особенность делает их непригодными для использования в роли конструктора.
Когда вы вызываете функцию через new, движок выполняет несколько шагов: создаёт новый объект, устанавливает его прототипом Fn.prototype, выполняет тело функции с this, указывающим на этот объект, и возвращает объект. Стрелочные функции лишены всех нужных для этого механизмов:
this — он берётся лексически из внешней области.prototype, поэтому нечего назначать в качестве прототипа нового объекта.[[Construct]], который требуется для вызова через new.const Person = (name) => {
this.name = name;
};
// TypeError: Person is not a constructor
const p = new Person('Alice');
// А обычная функция работает:
function User(name) {
this.name = name;
}
const u = new User('Bob'); // ok
Если нужен конструктор, используйте обычную функцию, класс или фабричную функцию. Классы в ES6 — это синтаксический сахар над прототипным наследованием, и они тоже не могут быть стрелочными.
class Person {
constructor(name) { this.name = name; }
}
// или фабрика
const createPerson = (name) => ({ name });
Итог: стрелочные функции стоит применять там, где нужен лексический this — колбэки, методы массивов, обработчики событий внутри классов. Для создания объектов используйте обычные функции или классы.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию