JavaScript 封装获取函数参数对象的工具函数
作者:闭包旅人时间:2026-10-30 09:26:03浏览:437
本文介绍如何在 JavaScript 中封装一个获取当前函数参数对象的工具函数。通过处理字符串两端空格并支持大小写配置,该函数能统一处理直接传入的参数或对象参数。文中提供了完整的 GetArgs 实现逻辑及 Test 函数的多种调用测试示例,展示如何灵活获取姓名和年龄等参数值。
封装获取参数对象的工具函数
在封装 JavaScript 控件或模块时,经常需要在函数中获取传入的直接参数或对象参数。为了避免每次调用时都手动判断第一个对象,可以封装一个辅助函数来统一获取当前函数中的参数值,从而简化代码逻辑。
GetArgs 函数实现逻辑
/*------------------------------------------
* 清除字符串两端空格,包含换行符、制表符
*------------------------------------------*/
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;
}
调用测试示例
以下是该工具函数的调用示例,展示了如何定义测试函数并传递不同类型的参数。
Test 函数参数传递测试
//测试函数
function Test(name, age) {
//获取参数对象
var args = GetArgs();
alert("姓名:" + args.name + ",年龄:" + args.age);
}
//调用测试
Test("张三", 25);
Test({ name: "李四", age: 30 });
Test({ name: "王五" }, 18);
作者最新文章
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
