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 相关文章推荐
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
XML、HTML、CSS与JS的区别整理
Feb 18 Javascript
JavaScript中的原型继承基础学习教程
May 06 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 Javascript
extjs图形绘制之饼图实现方法分析
Mar 06 Javascript
原型和原型链 prototype和proto的区别详情
Nov 02 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下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
简单了解Python3里的一些新特性
2019/07/13 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
高一历史教学反思
2014/01/13 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
五年级学生评语大全
2014/12/26 职场文书
公证处委托书
2015/01/28 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
MySQL RC事务隔离的实现
2022/03/31 MySQL
Oracle用户管理及赋权
2022/04/24 Oracle
Python 统计序列中元素的出现频度
2022/04/26 Python