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 相关文章推荐
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
javascript DIV实现跟随鼠标移动
Mar 19 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
JAVA面试题 static关键字详解
Jul 16 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 cookis创建实现代码
2009/03/16 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
Javascript验证方法大全
2015/09/21 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
浅谈js中的this问题
2017/08/31 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
Python函数中的函数(闭包)用法实例
2016/03/15 Python
如何完美的建立一个python项目
2020/10/09 Python
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
中职应届生会计求职信
2013/10/23 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
教师节活动主持词
2014/04/02 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
企业总经理任命书
2014/06/05 职场文书
党员自我评价2015
2015/03/03 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫