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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
纯javascript实现分页(两种方法)
Aug 26 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
Feb 12 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
PHP Document 代码注释规范
2009/04/13 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
限制文本字节数js代码
2007/03/06 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
vuex实现简易计数器
2016/10/27 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
ES6 十大特性简介
2020/12/09 Javascript
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
pandas string转dataframe的方法
2018/04/11 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python numpy 按行归一化的实例
2019/01/21 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
Django跨域请求原理及实现代码
2020/11/14 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
《春笋》教学反思
2014/04/15 职场文书
应届生自荐信
2014/06/30 职场文书
二人合伙经营协议书
2014/09/13 职场文书
运动会三级跳加油稿
2015/07/21 职场文书