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 ui dialog里调用datepicker的问题
Aug 06 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 Javascript
js select实现省市区联动选择
Apr 17 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
React Router基础使用
Jan 17 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 Javascript
js实现ATM机存取款功能
Oct 27 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
Feb 28 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 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中实现简单的ACL 完结篇
2011/09/07 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
常用PHP框架功能对照表
2014/10/23 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
详解Python中DOM方法的动态性
2015/04/11 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Django中间件基础用法详解
2019/07/18 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python 使用office365邮箱的示例
2020/10/29 Python
python Scrapy框架原理解析
2021/01/04 Python
"引用"与指针的区别是什么
2016/09/07 面试题
化学相关工作求职信
2013/10/02 职场文书
学校读书活动总结
2014/06/30 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
浅谈Java父子类加载顺序
2021/08/04 Java/Android