当前位置: 代码迷 >> Web前端 >> 利用闭包兑现的方法拦截器
  详细解决方案

利用闭包兑现的方法拦截器

热度:109   发布时间:2012-10-30 16:13:36.0
利用闭包实现的方法拦截器
该函数可以让你轻松获知任意函数的传入参数和返回值
注意:该函数使用需要Chrome控制台或者Firebug
App = function(){
					function getResultFn(name, fn){
                        return function(){
                            console.log("正在执行的函数:" + name);
                            console.log('该函数的参数列表:');
							for(var i=0;i<arguments.length;i++){
								console.log(arguments[i]);
							}
                            var res = fn.apply(this, arguments);
							if (res) {
								console.log('该函数运行结果:');
								console.log(res);
							}
                            return res;
                        }
                    }
					return {
						/**
						 * 
						 * @param {Object} clazz 对象
						 * @param {Object} name 对象属性名称(该属性必须为函数)
						 * @param {Object} isPrototype 该属性是否原型属性
						 */
						check:function(clazz,name,isPrototype){
							var p = (isPrototype===true)?clazz.prototype:clazz;
							if(!p[name]||typeof p[name]!= 'function'){
								console.log('This protperty is not exist or it is not a function!');
								return;
							}
							p[name] = getResultFn(name,p[name]);
						}
					}
				}();

该函数实现用到JS的闭包特性(包了两层)、特殊对象arguments、prototype属性、对象做为关联数组进行使用的知识,对于初学者理解起来肯定有点难度,不过使用起来可是相当的简单,譬如你要监听Array对象的push方法,只需要
App.check(Array,'push',true);

以下是Chrome控制台运行下的结果:



  相关解决方案