TypeError: calling a builtin X constructor without new is forbidden
JavaScript 异常“调用内置的 X 构造函数时禁止不使用 new”在尝试不使用 new 关键字调用内置构造函数时发生。所有现代构造函数,例如 Promise 和 Map,都必须与 new 一起调用。
消息
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)
错误类型
TypeError
哪里出错了?
在 JavaScript 中,不带 new 调用函数和带 new 构造函数是两个不同的操作,函数可能会根据其调用方式而表现不同。
除了以下旧版构造函数外,所有现代构造函数都必须与 new 一起调用
Object()Function()(及其子类)Error()(及其子类)RegExp()Array()
其他一些构造函数,例如 Date(),以及原始包装器,例如 String()、Number() 和 Boolean(),也可以带或不带 new 调用,但在两种情况下返回类型不同。
在每个构造函数页面上,您可以找到有关构造函数是否必须与 new 一起调用的信息。
示例
无效案例
js
const m = Map(); // TypeError: calling a builtin Map constructor without new is forbidden
有效情况
js
const m = new Map();