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 使用技巧精萃(.net html
Apr 25 Javascript
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
jquery使用正则表达式验证email地址的方法
Jan 22 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
Oct 10 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
Oct 29 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
Jun 13 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
vue-cli构建vue项目的步骤详解
Jan 27 Javascript
小程序云开发之用户注册登录
May 18 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 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 $_SERVER当前完整url的写法
2009/11/12 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
php面向对象值单例模式
2016/05/03 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python 测试实现方法
2008/12/24 Python
使用python统计文件行数示例分享
2014/02/21 Python
python创建临时文件夹的方法
2015/07/06 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
小学防溺水制度
2014/01/29 职场文书
聘用意向书
2014/07/29 职场文书
白酒营销策划方案
2014/08/17 职场文书
搞笑结婚保证书
2015/05/08 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
四风之害观后感
2015/06/09 职场文书
大学开学感言
2015/08/01 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python
mysql事务隔离级别详情
2021/10/24 MySQL