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 相关文章推荐
js获取select默认选中的Option并不是当前选中值
May 07 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
javascript对浅拷贝和深拷贝的详解
Oct 14 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
基于Vue实现图书管理功能
2017/10/17 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
React实现todolist功能
2020/12/28 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
Python原始套接字编程实例解析
2020/01/29 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
和平主题的演讲稿
2014/01/12 职场文书
全神贯注教学反思
2014/02/03 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
自我工作评价范文
2015/03/06 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript