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 相关文章推荐
Javascript实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
javascript替换已有元素replaceChild()使用介绍
Apr 03 Javascript
javascript实现存储hmtl字符串示例
Apr 25 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
Feb 20 Javascript
vue自定义switch开关组件,实现样式可自行更改
Nov 01 Javascript
微信小程序实现滚动加载更多的代码
Dec 06 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
Apr 07 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
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
利用php生成验证码
2017/02/23 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
JavaScript实现简单评论功能
2017/08/17 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python生成验证码实例
2014/08/21 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
简单解决Python文件中文编码问题
2015/11/22 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
python实现list由于numpy array的转换
2018/04/04 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
python实现简单银行管理系统
2019/10/25 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
社团活动策划书范文
2014/01/09 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
大学军训决心书
2015/02/05 职场文书
培训通知
2015/04/17 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android