TypeError: calling a builtin X constructor without new is forbidden

Ngoại lệ JavaScript "calling a builtin X constructor without new is forbidden" xảy ra khi bạn cố gắng gọi một constructor tích hợp mà không sử dụng từ khóa new. Tất cả các constructor hiện đại, chẳng hạn như PromiseMap, phải được gọi với new.

Thông báo

TypeError: Constructor X requires 'new' (V8-based)
TypeError: Promise constructor cannot be invoked without 'new' (V8-based)
TypeError: calling a builtin X constructor without new is forbidden (Firefox)
TypeError: calling X constructor without new is invalid (Safari)

Loại lỗi

TypeError

Nguyên nhân?

Trong JavaScript, gọi một hàm mà không có newxâ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.

Ngoài các constructor kế thừa sau đây, tất cả các constructor hiện đại phải được gọi với new:

Một số constructor khác, chẳng hạn như Date(), và các wrapper nguyên thủy, chẳng hạn như String(), Number(), và Boolean(), cũng có thể được gọi có hoặc không có new, nhưng các kiểu trả về khác nhau trong hai trường hợp.

Trên mỗi trang constructor, bạn có thể tìm thấy thông tin về việc constructor có phải được gọi với new hay không.

Ví dụ

Trường hợp không hợp lệ

js
const m = Map(); // TypeError: calling a builtin Map constructor without new is forbidden

Trường hợp hợp lệ

js
const m = new Map();

Xem thêm