TypeError: class 构造函数必须使用“new”调用

当在没有 类构造函数 的情况下调用 new 关键字时,会发生 JavaScript 异常“类构造函数必须使用 'new' 调用”。所有类构造函数都必须使用 new 调用。

消息

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)

错误类型

哪里出错了?

在 JavaScript 中,调用函数而不使用 new 和使用 new 构造函数是两个不同的操作,并且函数的行为可能因调用方式而异。

传统上,JavaScript 函数既用作构造函数又用作普通函数,并且可以使用 new.target 检测其调用方式。但是,类构造函数始终是构造函数,不能作为普通函数调用。

示例

无效情况

js
class X {}

X(); // TypeError: class constructors must be invoked with 'new'

有效情况

js
class X {}

new X();

另请参阅