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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
Javascript 数组排序详解
Oct 22 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
Vue.js组件使用开发实例教程
Nov 01 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
JS如何判断对象是否包含某个属性
Aug 29 Javascript
JS算法教程之字符串去重与字符串反转
Dec 15 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
Jun 21 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
python迭代器与生成器详解
2016/03/10 Python
使用Python写CUDA程序的方法
2017/03/27 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python3 replace()函数使用方法
2018/03/19 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
办公室副主任职责范本
2014/03/08 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python
SQL语句多表联合查询的方法示例
2022/04/18 MySQL