JavaScript获取function所有参数名的方法

 更新时间:2015年10月30日 09:36:54   作者:铁锚  
本文使用javascript获取function所有参数名的方法,对js获取function所有参数名感兴趣的朋友一起学习吧

我写了一个 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所有参数名的方法,本文写的不好还请大家见谅,欢迎大家提出宝贵意见。

相关文章

  • layui-table表复选框勾选的所有行数据获取的例子

    layui-table表复选框勾选的所有行数据获取的例子

    今天小编就为大家分享一篇layui-table表复选框勾选的所有行数据获取的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript省市级联下拉菜单实例

    JavaScript省市级联下拉菜单实例

    这篇文章主要为大家详细介绍了JavaScript省市级联下拉菜单实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 深入理解JavaScript 变量对象

    深入理解JavaScript 变量对象

    变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明,本文主要介绍了JavaScript 变量对象,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • js和jquery如何获取图片真实的宽度和高度

    js和jquery如何获取图片真实的宽度和高度

    按照插入的图片的尺寸来判断图片是横图还是竖图。然后判断过后给予不同的展示方式,下面为大家介绍下js和jquery如何获取图片真实的宽度和高度
    2014-09-09
  • JS实现根据出生年月计算年龄

    JS实现根据出生年月计算年龄

    本篇文章主要是对利用JS实现根据出生年月计算年龄的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • Javascript中数组sort和reverse用法分析

    Javascript中数组sort和reverse用法分析

    这篇文章主要介绍了Javascript中数组sort和reverse用法,实例分析了sort和reverse使用时的注意事项与相关技巧,具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • js内置对象处理_打印学生成绩单的简单实现

    js内置对象处理_打印学生成绩单的简单实现

    下面小编就为大家带来一篇js内置对象处理_打印学生成绩单的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Echarts.js无法引入问题解决方案

    Echarts.js无法引入问题解决方案

    这篇文章主要介绍了Echarts.js无法引入问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 小程序实现页面给自定义组件赋值

    小程序实现页面给自定义组件赋值

    这篇文章主要为大家详细介绍了小程序实现页面给自定义组件赋值,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • JavaScript笔记之数据属性和存储器属性

    JavaScript笔记之数据属性和存储器属性

    本文给大家介绍js数据属性和存储器属性,及两种属性的区别,对js数据属性存储器属性相关知识感兴趣的朋友一起学习
    2016-03-03

最新评论