我已经回顾了如何在JS中创建自定义错误,并编写了以下代码:
function AssertException(message)
{
"use strict";
Error.captureStackTrace(this, AssertException);
Object.assign(this, {name: 'AssertException', message: message});
}
AssertException.prototype = Object.create(Error.prototype);
AssertException.prototype.name = 'AssertException'
现在,当我尝试创建实例并将其输出到控制台(在Chrome中)时,它只是将其显示为对象而不是错误语法(在省略号块中使用堆栈)。 有关详细信息,请参见屏幕截图。
有没有办法定义一个错误类,它的输出将显示为标准错误类(省略号中的堆栈)?
PS。 console.log(new AssertException('abc').stack)
将展开的堆栈显示为字符串。
Google Chrome版本50.0.2661.94 m
答案 0 :(得分:0)
虽然我没有任何代码可以证明这一点,但我认为不同之处在于Chrome使用了不同的“处理程序”。
“Error”对象及其所有六个子类型都是本机对象。因此,要在控制台上打印,Chrome使用本机处理程序。也许,对chrome v8源代码具有更高可见性的人可以指向确切的处理程序。
您的代码创建的“AssertException”对象是非本机的。因此,使用“对象处理程序”来打印其内容。
FYI ..您可以使用以下方法检查某个功能是否为原生功能: