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中的new的使用方法与注意事项
May 16 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
深入理解JSON数据源格式
Jan 10 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
深入理解jquery中的事件与动画
May 24 Javascript
分类解析jQuery选择器
Nov 23 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
Jan 24 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
Jul 06 Javascript
vue $set 给数据赋值的实例
Nov 09 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简单静态页生成过程
2008/03/27 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python中super函数用法实例分析
2019/03/18 Python
python标记语句块使用方法总结
2019/08/05 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
职业生涯规划怎么写
2013/12/29 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
六一亲子活动感想
2015/08/07 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL