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 相关文章推荐
详解JavaScript时间格式化
Dec 23 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
javascript阻止事件冒泡和浏览器的默认行为
Jan 21 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
原生JS实现自定义滚动条效果
Oct 27 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
js中Array对象的常用遍历方法详解
Jan 17 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
前后端常见的几种鉴权方式(小结)
Aug 04 Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 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中常见的sql攻击正则表达式汇总
2014/11/06 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
php实现图片压缩处理
2020/09/09 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
甜品店的创业计划书范文
2014/01/02 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
大学军训心得体会800字
2016/01/11 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
python自动化八大定位元素讲解
2021/07/09 Python
MSSQL基本语法操作
2022/04/11 SQL Server