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实现 注册时选择阅读条款 左右移动
Apr 11 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
Bootstrap多级菜单的实现代码
May 23 Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
微信小程序input框中加入小图标的实现方法
Jun 19 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
Jun 05 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单例模式应用详解
2013/06/03 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
简介Django中内置的一些中间件
2015/07/24 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
详解python之协程gevent模块
2018/06/14 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
Python字符串及文本模式方法详解
2020/09/10 Python
新年晚会主持词
2014/03/24 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
项目合作意向书模板
2014/07/29 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
初中学生操行评语
2014/12/26 职场文书
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers
Java实现带图形界面的聊天程序
2022/06/10 Java/Android