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.Element类
Oct 13 Javascript
Span元素的width属性无效果原因及解决方案
Jan 15 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 Javascript
DIV+CSS+jQ实现省市联动可扩展
Jun 22 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
Vue插槽原理与用法详解
Mar 05 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 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 获取完整url地址
2008/12/20 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
深入理解PHP内核(一)
2015/11/10 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python虚拟环境virualenv的安装与使用
2016/12/18 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
Python里面如何拷贝一个对象
2014/02/17 面试题
中国入世承诺
2014/04/01 职场文书
运动会报道稿300字
2014/10/02 职场文书
毕业证明书
2015/06/19 职场文书
小学新课改心得体会
2016/01/22 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python