Js 获取当前函数参数对象的实现代码


Posted in Javascript onJune 20, 2016

有时候在封装控件的时候在很多 Js 函数中需要获取传入的直接参数或者对象参数,那么我们就需要每次都去判断第一个对象,所以为了方便在此封装一个函数,来获取当前函数中的参数值:

/*------------------------------------------
 * 清除字符串两端空格,包含换行符、制表符
 *------------------------------------------*/
String.prototype.Trim = function () { return this.replace(/(^[\s\n\t]+|[\s\n\t]+$)/g, ""); }

/*----------------------------------------
 * 获取当前函数的参数对象
 *----------------------------------------
 * diffCase 是否区分大小写,默认 false
 *----------------------------------------*/
function GetArgs(diffCase) {

 //返回参数对象
 var result = new Object();

 //获取调用函数
 var caller = arguments.callee.caller;
 if (caller == null || caller.arguments.length == 0) return result;

 //获取函数的参数集合
 var matchs = caller.toString().match(/\s*function[\w\s]*\(([\w\s,]*)\)/);
 if (matchs == null) return result;
 var argArray = matchs[1].split(",");

 //获取参数对象
 var params = caller.arguments[0];
 var index = typeof (params) == "object" ? 1 : 0;
 if (index == 1) {
  for (var p in params) {
   for (var i = 0; i < argArray.length; i++) {
    var arg = argArray[i].Trim();
    if (diffCase) {
     if (arg == p) {
      result[arg] = params[p];
      break;
     }
    } else {
     if (arg.toLocaleLowerCase() == p.toLocaleLowerCase()) {
      result[arg] = params[p];
      break;
     }
    }
   }
  }
 }
   
 //多个参数将第一个后面的参数覆盖对象传入的参数
 for (var i = index; i < argArray.length && i < caller.arguments.length; i++)
  result[argArray[i].Trim()] = caller.arguments[i];

 return result;
}

调用示例:

//测试函数
function Test(name, age) {

 //获取参数对象
 var args = GetArgs();

 alert("姓名:" + args.name + ",年龄:" + args.age);

}

//调用测试
Test("张三", 25);
Test({ name: "李四", age: 30 });
Test({ name: "王五" }, 18);
Javascript 相关文章推荐
在JavaScript中实现命名空间
Nov 23 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
Jun 23 Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 Javascript
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
vue组件发布到npm简单步骤
Nov 30 Javascript
JS中的BOM应用
Feb 02 Javascript
vue webpack重写cookie路径的方法
Jul 10 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 Javascript
JS实现鼠标框选效果完整实例
Jun 20 #Javascript
javascript事件冒泡简单示例
Jun 20 #Javascript
JS实现的打字机效果完整实例
Jun 20 #Javascript
jQuery实现的网格线绘制方法
Jun 20 #Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 #Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 #Javascript
Javascript中的arguments对象
Jun 20 #Javascript
You might like
PHP的FTP学习(四)
2006/10/09 PHP
php抓取https的内容的代码
2010/04/06 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
js更优雅的兼容
2010/08/12 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
python中的随机函数random的用法示例
2018/01/27 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
如何基于Python实现数字类型转换
2020/02/07 Python
python实现横向拼接图片
2020/03/23 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
农行心得体会
2014/09/02 职场文书
房产公证委托书范本
2014/09/20 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python