麻烦谁解释下这个东西是干什么用的? 或是在那里能看到文档也可以, 找了很久也没找到这个函数的资料.
谢谢各位哥哥姐姐
当catch到一个error. 获取error.stack时,会调用这个函数。
http://www.bennadel.com/blog/2828-creating-custom-error-objects-in-node-js-with-error-capturestacktrace.htm 这是一个自定义Error的例子
@joesonw 成功get新技能, thx
Error.captureStackTrace(targetObject[, constructorOpt]) 在targetObject中添加一个.stack属性。对该属性进行访问时,将以字符串的形式返回Error.captureStackTrace()语句被调用时的代码位置信息(即:调用栈历史)。
Error.captureStackTrace()并不是ECMAScript标准所定义的内容,而是由V8引擎提供的Stack Trace API, 因此只能在Node.js和Chome浏览器中使用。 Node.js相关文档地址:https://nodejs.org/api/errors.html#errors_error_capturestacktrace_targetobject_constructoropt V8相关文档地址:https://github.com/v8/v8/wiki/Stack-Trace-API
写过一篇介绍Error.captureStackTrace的文章,供参考:http://blog.shaochuancs.com/about-error-capturestacktrace/
@shaochuancs 感谢分享 但是看完了还是不是特别明白,Error.captureStackTrace(error)和new Error(error).stack的使用场景的区别 除了Error.captureStackTrace的第二个参数可以忽略部分栈信息之外,还有什么别的用法吗
@hyj1991 从适用性上来说,new Error().stack
的适用范围会更加广泛,而Error.captureStackTrace
只能在Node.js或者Chrome上使用。
在两者都能使用的情况下,优先使用Error.captureStackTrace
,原因为:
- 无需new一个新的Error对象,节省内存空间,同时代码上也会更加优雅。
- 如果需要忽略部分堆栈信息,使用
Error.captureStackTrace
会更加方便,无需手工操作。 - 如果使用
Error.captureStackTrace
,则对于堆栈信息的格式化工作会被延迟至访问targetObj.stack
时进行,如果targetObj.stack
未被访问,则堆栈信息的格式化工作会被省略,从而节省计算资源。
@shaochuancs 学到了,非常感谢!
谢谢