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 相关文章推荐
又一个小巧的图片预加载类
May 05 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
Oct 18 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
Mar 05 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
学习vue.js表单控件绑定操作
Dec 05 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
利用d3.js实现蜂巢图表带动画效果
Sep 03 Javascript
通过js实现压缩图片上传功能
Feb 25 Javascript
JavaScript实现前端网页版倒计时
Mar 24 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
js中日期的加减法
2015/05/06 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
Python入门篇之面向对象
2014/10/20 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python实现的端口扫描功能示例
2018/04/08 Python
Python操作qml对象过程详解
2019/09/26 Python
Python常用外部指令执行代码实例
2020/11/05 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
特此通知格式
2015/04/27 职场文书
趣味运动会简讯
2015/07/20 职场文书
高一军训感想
2015/08/07 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB