JavaScript获取function所有参数名的方法


Posted in Javascript onOctober 30, 2015

我写了一个 JavaScript函数来解析函数的参数名称, 代码如下:

function getArgs(func) {
 // 先用正则匹配,取得符合参数模式的字符串.
 // 第一个分组是这个: ([^)]*) 非右括号的任意字符
 var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
 // 用逗号来分隔参数(arguments string).
 return args.split(",").map(function(arg) {
  // 去除注释(inline comments)以及空格
  return arg.replace(/\/\*.*\*\//, "").trim();
 }).filter(function(arg) {
  // 确保没有 undefined.
  return arg;
 });
}

上面是检测的函数, 示例代码如下:

function myCustomFn(arg1, arg2,arg3) {
 // ...
}
// ["arg1", "arg2", "arg3"]
console.log(getArgs(myCustomFn));

正则表达式(regular expression) 是个好东西吗? 别的我不知道, 但在适当的场景用起来还是很给力的!

附带一个Java取得当前函数名的方法: Java 在函数中获取当前函数的函数名

public class Test { 
  private String getMethodName() { 
    StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace(); 
    StackTraceElement e = stacktrace[2]; 
    String methodName = e.getMethodName(); 
    return methodName; 
  } 
  public void getXXX() { 
    String methodName = getMethodName(); 
    System.out.println(methodName); 
  } 
  public void getYYY() { 
    String methodName = getMethodName(); 
    System.out.println(methodName); 
  } 
  public static void main(String[] args) { 
    Test test = new Test(); 
    test.getXXX(); 
    test.getYYY(); 
  } 
}

【运行结果】

getXXX 
getYYY 

【注意】

代码第5行,stacktrace[0].getMethodName() 是 getStackTrace,stacktrace[1].getMethodName() 是 getMethodName,stacktrace[2].getMethodName() 才是调用 getMethodName 的函数的函数名。

// 注意: stacktrace里面的位置;
// [1] 是“getMethodName”, [2] 是调用此方法的method

public static String getMethodName() { 
  StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace(); 
  StackTraceElement e = stacktrace[2]; 
  String methodName = e.getMethodName(); 
  return methodName; 
}

以上内容是本文给大家介绍的js获取function所有参数名的方法,本文写的不好还请大家见谅,欢迎大家提出宝贵意见。

Javascript 相关文章推荐
通过ifame指向的页面高度调整iframe的高度
Oct 05 Javascript
JavaScript入门教程(12) js对象化编程
Jan 31 Javascript
javascript 图片上传预览-兼容标准
Jun 01 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
Oct 18 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
解决axios发送post请求返回400状态码的问题
Aug 11 Javascript
通过实例了解js函数中参数的传递
Jun 15 Javascript
vue-cli4.5.x快速搭建项目
May 30 Vue.js
JavaScript与JQuery框架基础入门教程
Jul 15 Javascript
Rust中的Struct使用示例详解
Aug 14 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 #Javascript
jQuery实现切换页面过渡动画效果
Oct 29 #Javascript
js实现跨域的4种实用方法原理分析
Oct 29 #Javascript
异步JS框架的作用以及实现方法
Oct 29 #Javascript
图解JavaScript中的this关键字
May 28 #Javascript
jquery validate demo 基础
Oct 29 #Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 #Javascript
You might like
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php 获取客户端的真实ip
2009/11/30 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
PHP xpath()函数讲解
2019/02/11 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
Python and、or以及and-or语法总结
2015/04/14 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
Python向excel中写入数据的方法
2019/05/05 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
给领导的检讨书
2014/02/16 职场文书
运动会方队口号
2014/06/07 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js