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 相关文章推荐
jquery ajax例子返回值详解
Sep 11 Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 Javascript
js实现从中间开始往上下展开网页窗口的方法
Mar 02 Javascript
javascript实现完美拖拽效果
May 06 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
vue循环数组改变点击文字的颜色
Oct 14 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 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
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python实现FTP服务器服务的方法
2017/04/11 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
解析python的局部变量和全局变量
2019/08/15 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
运动会100米解说词
2014/01/23 职场文书
法律进企业活动方案
2014/03/04 职场文书
安全生产管理责任书
2014/04/16 职场文书
十佳护士先进事迹
2014/05/08 职场文书
课外小组活动总结
2014/08/27 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
单位政审意见范文
2015/06/04 职场文书
征求意见函
2015/06/05 职场文书
学雷锋活动简报
2015/07/20 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
pandas求平均数和中位数的方法实例
2021/08/04 Python
nginx中proxy_pass各种用法详解
2021/11/07 Servers