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 相关文章推荐
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
JQuery 文本框使用小结
May 22 Javascript
最短的IE判断代码
Mar 13 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
JS文件上传神器bootstrap fileinput详解
Jan 28 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
JS执行控制之节流模式实例分析
Dec 21 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面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php调用C代码的实现方法
2014/03/11 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PDO::errorInfo讲解
2019/01/28 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
Python中max函数用法实例分析
2015/07/17 Python
让python在hadoop上跑起来
2016/01/27 Python
判断网页编码的方法python版
2016/08/12 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
python3中eval函数用法使用简介
2019/08/02 Python
python如何基于redis实现ip代理池
2020/01/17 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
汽车驾驶求职信
2013/10/25 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
医院科室评语
2015/01/04 职场文书
投诉书范文
2015/07/02 职场文书
欢迎新生标语2015
2015/07/16 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书