function PropertyError(property) {
this.name = "PropertyError";
this.property = property;
this.message = "Ошибка в свойстве " + property;
if (Error.captureStackTrace) {
Error.captureStackTrace(this, PropertyError);
} else {
this.stack = (new Error()).stack;
}
}
PropertyError.prototype = Object.create(Error.prototype);
父构造函数在这里是可选的
通常,当我们继承时,我们会调用父级的构造函数。在这种情况下,调用看起来像 Error.call(this, message)。
严格来说,这里不需要这个调用。内置的 Error 构造函数没有做任何有用的事情,它甚至没有设置 this.message 属性(更不用说名称和堆栈)。调用它的唯一可能原因是它设置了 [[ErrorData]] 特殊内部属性,该属性显示在 toString 中并允许您看到这是一个错误。因此,按照标准,这种情况下继承时建议调用Error构造函数。
来源:Learn Javascript - Custom Errors,继承自 Error。
你能告诉我什么属性[[ErrorData]]吗?
我只是试图在这个例子的上下文中检查这个属性,它给了我:
function PropertyError(property) {
Error.call(this, property) ;
this.name = "PropertyError";
this.property = property;
this.message = "Ошибка в свойстве " + property;
if (Error.captureStackTrace) {
Error.captureStackTrace(this);
} else {
this.stack = (new Error()).stack;
}
}
var a = new PropertyError('Hey');
var aa = Error('Hey');
console.log(String(a));
console.log(String(aa));
VM1377:19 [object Object]
VM1377:20 Error: Hey
如规范中所述:
进去
Object.prototype.toString的话可以看到如下检查最终,这对于显示如下行是必要的:“[object”,tag,“]”
如果
Error它看起来像这样:[object Error]您可以通过设置对象的属性来覆盖此行为,而不是调用构造函数
Symbol.toStringTag