TypeError: "x" 不是构造函数
JavaScript 异常 "不是构造函数" 出现在尝试使用对象或变量作为构造函数时,但该对象或变量不是构造函数。
消息
TypeError: x is not a constructor (V8-based & Firefox & Safari)
错误类型
哪里出了问题?
示例
无效情况
js
const Car = 1;
new Car();
// TypeError: Car is not a constructor
new Math();
// TypeError: Math is not a constructor
new Symbol();
// TypeError: Symbol is not a constructor
function* f() {}
const obj = new f();
// TypeError: f is not a constructor
汽车构造函数
假设您想为汽车创建一种对象类型。您希望这种对象类型称为 Car
,并且希望它具有制造商、型号和年份的属性。为此,您将编写以下函数
js
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
现在,您可以创建名为 mycar
的对象,如下所示
js
const mycar = new Car("Eagle", "Talon TSi", 1993);
在 Promise 中
返回立即解析或立即拒绝的 Promise 时,您无需创建 new Promise(...)
并对其进行操作。而是使用 Promise.resolve()
或 Promise.reject()
静态方法。
这是非法的(Promise
构造函数 未被正确调用)并且将抛出 TypeError: this is not a constructor
异常
js
const fn = () => {
return new Promise.resolve(true);
};
这是合法的,但过于冗长
js
const fn = () => {
return new Promise((resolve, reject) => {
resolve(true);
});
};
而是返回静态方法
js
const resolveAlways = () => {
return Promise.resolve(true);
};
const rejectAlways = () => {
return Promise.reject(false);
};