05. Enforce new
Существует серьёзная опасность, связанная с конструктором функций: если при вызове конструктора функций отсутствует ключевое слово new
, то this
связывается не с создаваемым объектом, а с глобальным объектом.
Существует два способа гарантировать это:
Не использовать
this
в конструкторе, а собирать начиная с пустого объекта и возвращать его.Проверять, что
this
уже является экземпляром нужного класса в самом начале выполнения конструктора.
Проверка на this
(второй способ):
new.target
property
new.target
propertyСвойство new.target
позволяет определить была ли функция или конструктор вызваны с помощью оператора new
.
Если функция была вызвана при помощи оператора
new
, тоnew.target
возвращает ссылку на конструктор или функцию.При обычном вызове функции
new.target
имеет значениеundefined
.
В конструкторе класса, new.target
ссылается на конструктор, который был непосредственно вызван new
. Это верно и для случая, когда new.target
находится в конструкторе родительского класса, а тот в свою очередь вызывается из конструктора дочернего класса.
Подробнее: MDN: new.target
Last updated
Was this helpful?