JavaScript趣题:形参和实参的映射
程序员文章站
2022-04-13 21:13:00
...
作为对函数功能的扩展,你需要在一个函数被调用时,在它的形参和实参之间,建立正确的映射关系。
先来看下面的例子:
function func1(arg1, arg2) { ... } var map = createArgumentMap(func1,'valueOfArg1', 'valueOfArg2'); console.log(map['arg1']); // writes 'valueOfArg1' console.log(map['arg2']); // writes 'valueOfArg2'
这个映射函数接收一个函数对象作为第一个参数,以及一个长度未知的实参列表,你得在这个函数对象的形参和实参列表间建立映射,用一个关联数组表示,并返回。
实参列表和函数形参定义的顺序是一样的,而且都是有效合法的参数。
这个题目在于建立形参和实参的映射,那么,我们就先获得函数对象的toString()字符串形式,并且截取它的形参列表。
紧接着,因为实参列表长度未知,那么利用Array.prototype.slice方法,设置它的上下文为arguments对象,从索引1处开始截取实参,获得实参列表的数组形式。
最后,以实参列表为基准,建立关联数组,形参为key,实参为value,并且返回关联数组。
这样,这个参数映射函数就完成了。
String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g, ""); }; var findArgs = function(funcStr){ var bracket1 = funcStr.indexOf("("); var bracket2 = funcStr.indexOf(")"); var argsStr = funcStr.slice(bracket1+1,bracket2); var args = argsStr.split(","); return args.map(function(e){ return e.trim(); }); }; function createArgumentMap(func) { var args = findArgs(func.toString()); var realArgs = Array.prototype.slice.call(arguments,1); var map = {}; for(var i=0;i<realArgs.length;i++){ map[args[i]] = realArgs[i]; } return map; }
以上就是JavaScript趣题:形参和实参的映射的内容,更多相关内容请关注PHP中文网(www.php.cn)!