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 学习第五课 Ajax 使用说明
May 17 Javascript
jQuery 源码分析笔记(7) Queue
Jun 19 Javascript
javascript获取作用在元素上面的样式属性代码
Sep 20 Javascript
javascript实现日期按月份加减
May 15 Javascript
vue开发心得和技巧分享
Oct 27 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
微信小程序生成二维码的示例代码
Mar 29 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
这样回答继承可能面试官更满意
Dec 10 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
一个域名查询的程序
2006/10/09 PHP
PHP初学入门
2006/11/19 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
jquery退出each循环的写法
2014/02/26 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JS表的模拟方法
2015/02/05 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
vue组件生命周期详解
2017/11/07 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
js实现网页随机验证码
2020/10/19 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
对命令行模式与python交互模式介绍
2018/05/12 Python
python批量创建指定名称的文件夹
2019/03/21 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Python urllib2运行过程原理解析
2020/06/04 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
毕业典礼主持词
2015/06/29 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python