首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Errors: Not a constructor

信息

代码语言:javascript
复制
TypeError: "x" is not a constructor

TypeError: Math is not a constructor
TypeError: JSON is not a constructor
TypeError: Symbol is not a constructor
TypeError: Reflect is not a constructor
TypeError: Intl is not a constructor
TypeError: SIMD is not a constructor
TypeError: Atomics is not a constructor

错误类型

TypeError

哪里出错了?

是因为尝试将不是构造器的对象或者变量来作为构造器使用。参考constructor或者?newoperator?来了解什么是构造器。

有很多的全局对象比如?StringArray等等都是可以使用new?操作符的构造器。但是有一些全局对象并不是,且其属性和方法都是静态的。下面的?JavaScript 标准内置对象都不是构造器:MathJSONSymbolReflectIntlSIMDAtomics

Generator functions也不能作为构造器来使用。

示例

无效的

代码语言:javascript
复制
var 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() {};
var obj = new f;
// TypeError: f is not a constructor

一个构造器

假设你想为汽车创建一个对象类型。 你希望此类型的对象被称为car,并且您希望它具有make,model 和 year 属性。 为此,你编写以下函数:

代码语言:javascript
复制
function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

现在你可以创建一个名为mycar的对象,如下所示:

代码语言:javascript
复制
var mycar = new Car('Eagle', 'Talon TSi', 1993);

关于 Promises?

当返回了一个 immediately-resolved 或者 immediately-rejected Promise 的时候,你根本不需要去创建、操作一个新的 Promise 对象。

这是不合法的(Promise constructor?被错误的调用了)且会抛出一个 错误?TypeError: this is not a constructorexception:

代码语言:javascript
复制
return new Promise.resolve(true);

使用?Promise.resolve()?或者?Promise.reject()?静态方法来代替:

代码语言:javascript
复制
// This is legal, but unnecessarily long:
return new Promise((resolve, reject) => { resolve(true); })

// Instead, return the static method:
return Promise.resolve(true);
return Promise.reject(false);

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com