TypeError: class constructors must be invoked with 'new'
The JavaScript exception "class constructors must be invoked with 'new'" occurs when a class constructor is called without the new
keyword. All class constructors must be called with new
.
Message
TypeError: Class constructor X cannot be invoked without 'new' (V8-based) TypeError: Class constructors cannot be invoked without 'new' (V8-based) TypeError: class constructors must be invoked with 'new' (Firefox) TypeError: Cannot call a class constructor without |new| (Safari)
Error type
What went wrong?
In JavaScript, calling a function without new
and constructing a function with new
are two distinct operations, and functions can behave differently depending on how they are called.
Traditionally, JavaScript functions have been used as both constructors and normal functions, and can detect how they were called using new.target
. However, class constructors are always constructors and cannot be called as normal functions.
Examples
Invalid cases
js
class X {}
X(); // TypeError: class constructors must be invoked with 'new'
Valid cases
js
class X {}
new X();