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对象和DOM对象相互转化
Apr 24 Javascript
javaScript arguments 对象使用介绍
Oct 18 Javascript
javacript使用break内层跳出外层循环分析
Jan 12 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
canvas 实现中国象棋
Feb 17 Javascript
Map.vue基于百度地图组件重构笔记分享
Apr 17 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
JS函数本身的作用域实例分析
Mar 16 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
最常用的8款PHP调试工具
2014/07/06 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
使用Web Uploader实现多文件上传
2016/06/08 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
Python中的闭包详细介绍和实例
2014/11/21 Python
Python使用OpenCV进行标定
2018/05/08 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
如何给Python代码进行加密
2020/01/10 Python
Python常用外部指令执行代码实例
2020/11/05 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
冰淇淋店创业计划书范文
2013/12/27 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
团委竞选演讲稿
2014/04/24 职场文书
群教班子对照检查材料
2014/08/26 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
前台文员岗位职责
2015/02/04 职场文书
公司聚餐通知
2015/04/22 职场文书
硕士论文致谢范文
2015/05/14 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android