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 相关文章推荐
文本链接逐个出现的js脚本
Dec 12 Javascript
JQuery autocomplete 使用手册
Apr 01 Javascript
基于jQuery架构javascript基础体系
Jan 01 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
jQuery输入城市查看地图使用介绍
May 08 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
javascript中递归的两种写法
Jan 17 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
Jul 24 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 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
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
javascript折半查找详解
2015/01/26 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
python之wxPython菜单使用详解
2014/09/28 Python
python调用外部程序的实操步骤
2019/03/04 Python
详解Python_shutil模块
2019/03/15 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
党员思想汇报范文
2013/12/30 职场文书
团日活动策划书
2014/02/01 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
初中班级口号
2014/06/09 职场文书
护士求职信
2014/07/05 职场文书
ktv好的活动方案
2014/08/15 职场文书
MySQL存储过程及语法详解
2022/08/05 MySQL