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 相关文章推荐
setTimeout与setInterval在不同浏览器下的差异
Jan 24 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
js null,undefined,字符串小结
Aug 21 Javascript
TBCompressor js代码压缩
Jan 05 Javascript
一些实用的jQuery代码片段收集
Jul 12 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
jQuery动画与特效详解
Feb 01 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
详解react、redux、react-redux之间的关系
Apr 11 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 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获取某个目录大小的代码
2008/09/10 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
对联广告js flash激活
2006/10/19 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
详解Python如何生成词云的方法
2018/06/01 Python
用Python读取几十万行文本数据
2018/12/24 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
校园之声广播稿
2014/01/31 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
民族团结先进个人材料
2014/02/05 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
继承权公证书范本
2015/01/23 职场文书
关于远足的感想
2015/08/10 职场文书
《观察物体》教学反思
2016/02/17 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
OpenCV实现常见的四种图像几何变换
2022/04/01 Python