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 相关文章推荐
FusionCharts图表显示双Y轴双(多)曲线
Nov 22 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
jQuery实现拖动剪裁图片作为头像
Dec 28 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
javascript简单写的判断电话号码实例
May 24 Javascript
js自定义input文件上传样式
Oct 26 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
webpack打包html里面img后src为“[object Module]”问题
Dec 22 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
Apr 25 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
桌面中心(四)数据显示
2006/10/09 PHP
Banner程序
2006/10/09 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
JavaScript中this详解
2015/09/01 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
python显示生日是星期几的方法
2015/05/27 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
手机被没收检讨书
2014/02/22 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
关于感谢信的范文
2015/01/23 职场文书
优秀团员个人总结
2015/02/26 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python