TypeScript之调用栈的实现


Posted in Javascript onDecember 31, 2019

本文介绍了TypeScript之调用栈,分享给大家,具体如下:

class CallStackTool{
  private static index:number = 0;
  public static printCallStack (count:number , simple: boolean = true):void {
    let caller:Function = arguments.callee.caller;
    let i:number = 0;
    count = count || 10;
    CallStackTool.index ++;
    if( CallStackTool.index > 500 ) CallStackTool.index = 1;
    console.log(`***-----------------${CallStackTool.index}Start----------------------- **`);
    while (caller && i < count) {
      console.log(`${(i+1)}: \n ${CallStackTool.getFunctionName(caller,simple)}`);
      caller = caller.caller;
      i++;
    }
    console.log(`***-----------------${CallStackTool.index}End----------------------- **`);
  }

  private static getFunctionName(func:any,simple: boolean):string {
    if( simple ){
      let name:any;
      if ( typeof func == 'function' ) {
        name = ('' + func).match(/function\s*\((\s*\$*\S+\s*,)*(\s*\$*\S+\s*)?\)/g);
        let $result: string = name && name[0];
        if( $result != `function ()` ){
          return $result;
        }
      }
    }
    return func.toString();
  }
}

测试代码:

class Test2CallStack{

  public add( i:number, b:number ):number{
    CallStackTool.printCallStack(2,true);
    return i +b;
  }

  public a( c:number, q:number ): number{
    return this.add(c,q);
  }

  public print() : void{
    console.log(`${this.a(1,1)}`);
  }
}

开始测试:

TypeScript之调用栈的实现

结果:

TypeScript之调用栈的实现

所以,尽量给function的参数取一些好的名字.

另外一点 , 不会出现function()这样的打印 , 出现没有参数的function , 我会将方法体内容也打印出来

如果需要把每一个function的方法体的内容打印出来CallStackTool.printCallStack(2,false), 将第二个参数设置未false

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
JS字符串截取函数实例
Dec 27 Javascript
javascript简单实现类似QQ头像弹出效果的方法
Aug 03 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
js选择器全面解析
Jun 27 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
Mar 06 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
Jul 03 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 #Javascript
Vue实现剪贴板复制功能
Dec 31 #Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 #Javascript
小程序外卖订单界面的示例代码
Dec 30 #Javascript
记录微信小程序 height: calc(xx - xx);无效问题
Dec 30 #Javascript
JS三级联动代码格式实例详解
Dec 30 #Javascript
JavaScript监听触摸事件代码实例
Dec 30 #Javascript
You might like
来自PHP.NET的入门教程
2006/10/09 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python读写csv文件实例代码
2019/07/05 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
大专生工程监理求职信
2013/10/04 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
企业办公室岗位职责
2014/03/12 职场文书
合作投资意向书
2014/04/01 职场文书
学术诚信承诺书
2014/05/26 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
中队活动总结
2014/08/27 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书