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 相关文章推荐
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
Sep 27 Javascript
Jquery AJAX 框架的使用方法
Nov 03 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
解析jQuery与其它js(Prototype)库兼容共存
Jul 04 Javascript
javascript Array.prototype.slice的使用示例
Nov 14 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
javascript实现校验文件上传控件实例
Apr 20 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 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
VOLVO车载收音机
2021/03/02 无线电
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
php中__toString()方法用法示例
2016/12/07 PHP
js查找父节点的简单方法
2008/06/28 Javascript
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Python面向对象特殊成员
2017/04/24 Python
python配置grpc环境
2019/01/01 Python
Django 多环境配置详解
2019/05/14 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
python 消费 kafka 数据教程
2019/12/21 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
Sony C++笔试题
2013/03/10 面试题
详细的大学生创业计划书模板
2014/01/27 职场文书
《灯光》教学反思
2014/02/08 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
社区国庆节活动总结
2015/03/23 职场文书
离婚起诉状范本
2015/05/19 职场文书