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 相关文章推荐
dojo 之基础篇
Mar 24 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
详解JS模块导入导出
Dec 20 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
layui在form表单页面通过Validform加入简单验证的方法
Sep 06 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 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实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
一步步解析Python斗牛游戏的概率
2016/02/12 Python
python修改txt文件中的某一项方法
2018/12/29 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
数控技术专业毕业自荐书范文
2014/02/05 职场文书
三爱活动实施方案
2014/03/19 职场文书
代办委托书怎样写
2014/04/08 职场文书
重点工程汇报材料
2014/08/27 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
行政介绍信范文
2015/05/04 职场文书
小学班级口号大全
2015/12/25 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python