Js 获取当前函数参数对象的实现代码
有时候在封装控件的时候在很多Js函数中需要获取传入的直接参数或者对象参数,那么我们就需要每次都去判断第一个对象,所以为了方便在此封装一个函数,来获取当前函数中的参数值:
/*------------------------------------------
*清除字符串两端空格,包含换行符、制表符
*------------------------------------------*/
String.prototype.Trim=function(){returnthis.replace(/(^[\s\n\t]+|[\s\n\t]+$)/g,"");}
/*----------------------------------------
*获取当前函数的参数对象
*----------------------------------------
*diffCase是否区分大小写,默认false
*----------------------------------------*/
functionGetArgs(diffCase){
//返回参数对象
varresult=newObject();
//获取调用函数
varcaller=arguments.callee.caller;
if(caller==null||caller.arguments.length==0)returnresult;
//获取函数的参数集合
varmatchs=caller.toString().match(/\s*function[\w\s]*\(([\w\s,]*)\)/);
if(matchs==null)returnresult;
varargArray=matchs[1].split(",");
//获取参数对象
varparams=caller.arguments[0];
varindex=typeof(params)=="object"?1:0;
if(index==1){
for(varpinparams){
for(vari=0;i<argArray.length;i++){
vararg=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(vari=index;i<argArray.length&&i<caller.arguments.length;i++)
result[argArray[i].Trim()]=caller.arguments[i];
returnresult;
}
调用示例:
//测试函数
functionTest(name,age){
//获取参数对象
varargs=GetArgs();
alert("姓名:"+args.name+",年龄:"+args.age);
}
//调用测试
Test("张三",25);
Test({name:"李四",age:30});
Test({name:"王五"},18);