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 相关文章推荐
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
Jun 26 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
Apr 12 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
Aug 24 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
vue遍历对象中的数组取值示例
Nov 07 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正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
vant实现购物车功能
2020/06/29 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
Python中单例模式总结
2018/02/20 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python实现随机漫步算法
2018/08/27 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
python3实现单目标粒子群算法
2019/11/14 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
计算机维护专业推荐信
2014/02/27 职场文书
经典安踏广告词
2014/03/21 职场文书
阳光体育活动总结
2014/04/30 职场文书
党员服务承诺书
2014/05/28 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript