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ư Promise và Map, 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ó 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.
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:
Object()Function()(và các lớp con của nó)Error()(và các lớp con của nó)RegExp()Array()
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ệ
const m = Map(); // TypeError: calling a builtin Map constructor without new is forbidden
Trường hợp hợp lệ
const m = new Map();