作家
登录

深入理解JavaScript错误和堆栈追踪

作者: 来源: 2017-04-25 17:10:21 阅读 我要评论

 the relevant line for us 
  •         throw new AssertionError(msg, { 
  •                 actual: actual 
  •             , expected: expected 
  •             , showDiff: showDiff 
  •         }, (config.includeStack) ? this.assert : flag(this, 'ssfi')); 
  •     } 
  • }; 
  • assert办法负责检查断言布尔表达式是否经由过程。如不雅不经由过程,我们则实例化一个AssertionError。不知道你留意到没,在实例化AssertionError时,我们也给它传递了一个客栈追踪函数指导器(ssfi),如不雅设备的includeStack处于开启状况,我们经由过程将this.assert本身传递给它来为用户显示全部客栈跟踪。反之,我们则只显示ssfi标记中存储的内容,隐蔽掉落客栈跟踪中更多的内部实现细节。

    如今让我们来评论辩论下一行和我们相干的代码吧:

    如你所见,当我们在c中打印客栈,客栈中的记录为a,b,c。

    1. `new Assertion(obj, msg, ssfi, true).to.have.property('length');` 

    As you can see here we are passing the content we’ve got from the ssfi flag when creating our nested assertion. This means that when the new assertion gets created it will use this function as the starting point for removing unuseful frames from the stack trace. By the way, this is the Assertion constructor: 如你所见,我们在创建嵌套断言时将大年夜ssfi标记中的内容传递给了它。这意味着新创建的断言会应用那个办法作为肇端调用帧,大年夜而可以大年夜客栈追踪中清除没有的调用栈。趁便也看下Assertion的构造器吧:

    1. function Assertion (obj, msg, ssfi, lockSsfi) { 
    2.     // This is the line that matters to us 
    3.     flag(this, 'ssfi', ssfi || Assertion); 
    4.     flag(this, 'lockSsfi', lockSsfi); 
    5.     flag(this, 'object', obj); 
    6.     flag(this, 'message', msg); 
    7.  
    8.     return util.proxify(this); 

    不知道你是否还记的我先前说过的addChainableMethod办法,它应用本身的父级办法设置ssfi标记,这意味着它始终处于客栈的底部,我们可以删除它之上的所有调用帧。

    经由过程将ssfi传递给嵌套断言,它只检查我们的对象是否具有长度属性,我们就可以避免重置我们将要用作肇端指标器的调用帧,然后在客栈中可以看到以前的addChainableMethod。

    这可能看起来竽暌剐点复杂,所以让我们回想一下我们想大年夜栈中删除无用的调用帧时Chai中所产生的工作:

    • 当我们运行断言时,我们将它本身的办法作为移除客栈中的下一?调用帧的参考
    • 断言掉败时,我们会移除所有我们在参考帧之后保存的内部调用帧。
    • 如不雅存在嵌套的断言。我们必须依旧应用当前断言的父办法作为删除下一?调用帧的参考点,是以我们把当前的ssfi(肇端函数指导器)传递给我们所创建的断言,以便它可以保存。

    【编辑推荐】

    1. 实用于仪表盘项目标7个优良JavaScript库
    2. JavaScript即将来:介绍14个JavaScript的框架和库
    3. 在Node.js中看JavaScript的引用
    4. 大年夜JavaScript到TypeScript - 模块化和构建
    5. 2017值得一瞥的JavaScript相干技巧趋势
    【义务编辑:51CTO_OS TEL:(010)68476606】

      推荐阅读

      深度卷积神经网络在目标检测中的进展

    近些年来,深度卷积神经收集(DCNN)在图像分类和辨认上取得了很明显的进步。回想大年夜 2014 到 2016 这两年多的时光,先后出现出了 R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SD>>>详细阅读


    本文标题:深入理解JavaScript错误和堆栈追踪

    地址:http://www.17bianji.com/lsqh/34953.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)