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 相关文章推荐
兼容ie、firefox的图片自动缩放的css跟js代码分享
Jan 21 Javascript
JavaScript 布尔操作符解析  && || !
Aug 10 Javascript
JavaScript eval() 函数介绍及应用示例
Jul 29 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
详解tween.js的使用教程
Sep 14 Javascript
解决vue 项目引入字体图标报错、不显示等问题
Sep 01 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
JavaScript实现模态对话框实例
Jan 13 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
Python编写屏幕截图程序方法
2015/02/18 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python optparse模块使用实例
2015/04/09 Python
Python判断Abundant Number的方法
2015/06/15 Python
python机器学习库常用汇总
2017/11/15 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
银行员工职业规划范文
2014/01/21 职场文书
技术股份合作协议书
2014/10/05 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
世界气象日活动总结
2015/02/27 职场文书
实习介绍信范文
2015/05/05 职场文书
Python时间操作之pytz模块使用详解
2022/06/14 Python