Google Chrome 将自定义错误实例显示为纯对象
Google Chrome shows custom error instance as pure object
我回顾了如何在 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 中),它只是将其显示为对象而不是错误语法(省略号块中有堆栈)。
详情见截图。
有没有办法定义错误 class,使其输出显示为标准错误 classes(省略号中的堆栈)?
PS。 console.log(new AssertException('abc').stack)
将展开的堆栈显示为字符串。
Google Chrome 版本 50.0.2661.94 m
虽然我没有任何代码来证明这一点,但我相信差异是由于 Chrome 使用不同的“处理程序”。
“错误”对象及其所有六个子类型都是本机对象。因此,为了在控制台上打印,Chrome 使用本机处理程序。也许,对 chrome v8 源代码有更多了解的人可以指出确切的处理程序。
您的代码创建的“AssertException”对象是非本机的。因此,使用“对象处理程序”来打印其内容。
仅供参考..您可以使用以下方法检查函数是否为本机函数:
https://gist.github.com/hilbix/a298f4c969593fabb08074628dc304b8
我回顾了如何在 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 中),它只是将其显示为对象而不是错误语法(省略号块中有堆栈)。 详情见截图。
有没有办法定义错误 class,使其输出显示为标准错误 classes(省略号中的堆栈)?
PS。 console.log(new AssertException('abc').stack)
将展开的堆栈显示为字符串。
Google Chrome 版本 50.0.2661.94 m
虽然我没有任何代码来证明这一点,但我相信差异是由于 Chrome 使用不同的“处理程序”。
“错误”对象及其所有六个子类型都是本机对象。因此,为了在控制台上打印,Chrome 使用本机处理程序。也许,对 chrome v8 源代码有更多了解的人可以指出确切的处理程序。
您的代码创建的“AssertException”对象是非本机的。因此,使用“对象处理程序”来打印其内容。
仅供参考..您可以使用以下方法检查函数是否为本机函数:
https://gist.github.com/hilbix/a298f4c969593fabb08074628dc304b8