TypeError: class constructors must be invoked with 'new'
Ngoại lệ JavaScript "class constructors must be invoked with 'new'" xảy ra khi một constructor của lớp được gọi mà không có từ khóa new. Tất cả các constructor của lớp phải được gọi với new.
Thông báo
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)
Loại lỗi
TypeError
Nguyên nhân?
Trong JavaScript, gọi một hàm mà không có new và xây dựng một hàm với new là hai hoạt động khác nhau, và các hàm có thể hoạt động khác nhau tùy thuộc vào cách chúng được gọi.
Theo truyền thống, các hàm JavaScript được sử dụng vừa như constructor vừa như hàm thông thường, và có thể phát hiện cách chúng được gọi bằng cách sử dụng new.target. Tuy nhiên, constructor của lớp luôn luôn là constructor và không thể được gọi như hàm thông thường.
Ví dụ
>Trường hợp không hợp lệ
js
class X {}
X(); // TypeError: class constructors must be invoked with 'new'
Trường hợp hợp lệ
js
class X {}
new X();