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 相关文章推荐
Web前端框架bootstrap实战【第一次接触使用】
Dec 28 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
jquery实现倒计时小应用
Sep 19 jQuery
Vue下拉框回显并默认选中随机问题
Sep 06 Javascript
JavaScript中this的全面解析及常见实例
May 14 Javascript
javascript for循环性能测试示例
Aug 07 Javascript
js回调函数仿360开机
Dec 26 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
node.js文件的复制、创建文件夹等相关操作
Feb 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
Python常见数据结构详解
2014/07/24 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
关于box-sizing的全面理解
2016/07/28 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
实习自荐信
2013/10/13 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
关于赌博的检讨书
2014/01/24 职场文书
2015年班组长工作总结
2015/04/10 职场文书
幼儿园开学通知
2015/04/24 职场文书
中秋节主题班会
2015/08/14 职场文书
如何写好开幕词?
2019/06/24 职场文书
Python+DeOldify实现老照片上色功能
2022/06/21 Python