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 相关文章推荐
ie和firefox中img对象区别的困惑
Dec 27 Javascript
window.showModalDialog使用手册
Jan 11 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
解决ueditor jquery javascript 取值问题
Dec 30 Javascript
JavaScript多线程详解
Aug 12 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
原生JS实现小小的音乐播放器
Oct 16 Javascript
JavaScript类的继承方法小结【组合继承分析】
Jul 11 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 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中使用Oracle数据库(4)
2006/10/09 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
js数组的操作详解
2013/03/27 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
python 下载文件的多种方法汇总
2020/11/17 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
行政助理的职责
2013/11/14 职场文书
应届护士推荐信
2013/11/16 职场文书
员工年终演讲稿
2014/01/03 职场文书
自荐信的基本格式
2014/02/22 职场文书
《花木兰》教学反思
2014/04/09 职场文书
北京奥运会口号
2014/06/21 职场文书
安全演讲稿开场白
2014/08/25 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
机关作风建设心得体会
2014/10/22 职场文书
初中毕业生感言
2015/07/31 职场文书
python小程序之飘落的银杏
2021/04/17 Python