Google Chrome会将自定义错误实例显示为纯对象

时间:2016-05-03 22:18:27

标签: javascript google-chrome console.log custom-errors

我已经回顾了如何在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

Console output screenshot for details

1 个答案:

答案 0 :(得分:0)

虽然我没有任何代码可以证明这一点,但我认为不同之处在于Chrome使用了不同的“处理程序”。

“Error”对象及其所有六个子类型都是本机对象。因此,要在控制台上打印,Chrome使用本机处理程序。也许,对chrome v8源代码具有更高可见性的人可以指向确切的处理程序。

您的代码创建的“AssertException”对象是非本机的。因此,使用“对象处理程序”来打印其内容。

FYI ..您可以使用以下方法检查某个功能是否为原生功能:

https://gist.github.com/jdalton/5e34d890105aca44399f