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 相关文章推荐
javascript DOM编程实例(智播客学习)
Nov 23 Javascript
js 动态选中下拉框
Nov 26 Javascript
巧用replace将文字表情替换为图片
Apr 17 Javascript
JS修改iframe页面背景颜色的方法
Apr 01 Javascript
教你如何终止JQUERY的$.AJAX请求
Feb 23 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
利用Javascript裁剪图片并存储的简单实现
Mar 13 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 Javascript
JS实现随机点名器
Apr 12 Javascript
JavaScript文档加载模式以及元素获取
Jul 28 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的hash算法介绍
2014/02/13 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
smarty简单应用实例
2015/11/03 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
PHP实现简单日历类编写
2020/08/28 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
ie8本地图片上传预览示例代码
2014/01/12 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
python清除字符串里非字母字符的方法
2015/07/02 Python
在Django中创建第一个静态视图
2015/07/15 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
一年级小学生评语
2014/04/22 职场文书
大学生学期个人总结
2015/02/12 职场文书
2016新年年会主持词
2015/07/06 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers