这篇文章主要介绍了 Js 获取当前函数参数对象的实现代码, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
有时候在封装控件的时候在很多 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);
来源: http://www.phperz.com/article/17/0305/264720.html