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的复制网页内容到WORD的实现代码
Feb 16 Javascript
JS 实现获取打开一个界面中输入的值
Mar 19 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
基于js中this和event 的区别(详解)
Oct 24 Javascript
详解Vue路由钩子及应用场景(小结)
Nov 07 Javascript
JQuery扩展对象方法操作示例
Aug 21 jQuery
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
详解Vue项目中实现锚点定位
Apr 24 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
php适配器模式简单应用示例
2019/10/23 PHP
js控制浏览器全屏示例代码
2014/02/20 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python支付宝支付示例详解
2019/08/22 Python
Python如何计算语句执行时间
2019/11/22 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
python request 模块详细介绍
2020/11/10 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
中介业务员岗位职责
2014/04/09 职场文书
优秀员工推荐材料
2014/12/20 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android