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 相关文章推荐
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
Mar 23 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
XMLHttpRequest Level 2 使用指南
Aug 26 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
bootstrap table实例详解
Jan 06 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
使用layer模态框给新页面传值的方法
Sep 27 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
smarty section简介与用法分析
2008/10/03 PHP
简单的自定义php模板引擎
2016/08/26 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
node.js调用C++开发的模块实例
2015/07/03 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
Python使用minidom读写xml的方法
2015/06/03 Python
django初始化数据库的实例
2018/05/27 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
NumPy中的维度Axis详解
2019/11/26 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
数控加工专业毕业生自荐信
2013/09/27 职场文书
外语专业毕业生个人的自荐信
2013/11/19 职场文书
品质口号大全
2014/06/17 职场文书
八项规定对照检查材料
2014/08/31 职场文书
2014和解协议书范文
2014/09/15 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
django 认证类配置实现
2021/11/11 Python