TypeError: "x" is 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
错误类型
哪里出错了?
是因为尝试将不是构造器的对象或者变量来作为构造器使用。参考 constructor 或者 new
operator 来了解什么是构造器。
有很多的全局对象比如 String
、Array
等等都是可以使用 new
操作符的构造器。但是有一些全局对象并不是,且其属性和方法都是静态的。下面的 JavaScript 标准内置对象都不是构造器:Math
,JSON
,Symbol
,Reflect
,Intl
,SIMD
,Atomics
。
Generator functions 也不能作为构造器来使用。
示例
无效的
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 属性。 为此,你编写以下函数:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
现在你可以创建一个名为 mycar
的对象,如下所示:
var mycar = new Car("Eagle", "Talon TSi", 1993);
关于 Promises
当返回了一个 immediately-resolved 或者 immediately-rejected Promise 的时候,你根本不需要去创建、操作一个新的 Promise 对象。
这是不合法的(Promise constructor 被错误的调用了)且会抛出一个 错误 TypeError: this is not a constructor
exception:
return new Promise.resolve(true);
使用 Promise.resolve() 或者 Promise.reject() 静态方法来代替:
// 这是合法的,但是没必要这么长:
return new Promise((resolve, reject) => { resolve(true); })
// 用静态方法来代替:
return Promise.resolve(true);
return Promise.reject(false);
相关链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论