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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
javascript eval函数深入认识
Feb 21 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
JavaScript数据结构与算法之链表
Jan 29 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
Sep 17 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 Javascript
js实现验证码功能
Jul 24 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
php计算税后工资的方法
2015/07/28 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
微信支付开发订单查询实例
2016/07/12 PHP
浅谈php调用python文件
2019/03/29 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
python和C语言混合编程实例
2014/06/04 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
python实现求特征选择的信息增益
2018/12/18 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
军训自我鉴定
2014/01/22 职场文书
小区门卫值班制度
2014/01/24 职场文书
企业总经理职责
2014/02/02 职场文书
中式结婚主持词
2014/03/14 职场文书
幼师求职自荐信
2014/05/31 职场文书
2015毕业寄语大全
2015/02/26 职场文书
关于开学的感想
2015/08/10 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL