日期:2014-05-16  浏览次数:20369 次

今天无聊javascript写了一个可以监听函数的小插件 新手
本帖最后由 ty646169607 于 2013-09-10 22:32:57 编辑
主要功能就是:
可以监听一个指定的函数,当被监听的函数被人调用的时候,会先调用监听的回调函数,\

当回调函数返回true时,才会继续调用被监听的函数,

返回不是true的时候,直接将回调返回的值返回给调用者.

这里是源文件:

//应用到所有Object类型中  
Object.prototype.monitor=monitor;  
/* 
    函数监听,可以监听指定的函数,函数调用前会先调用monitorFun方法,方法返回true则放行,返回其他的则直接将返回数据返回给调用方 
    funName:要监听的函数名字 
    monitorFun:回调函数,回调函数会接受到调用方调用的参数数组,在回调中可以修改参数。 
  */  
function monitor(funName,monitorFun){  
    //var mCaller=monitor2.caller;  
    //alert(mCaller);  
    //var parentObj = (mCaller==null?window:mCaller);  
    var parentObj = this;  
    var funTemp = parentObj[funName];  
    //生成拦截方法  
    var ljFun=function(){  
        //调用回调函数 来判断是否放行  
        var ret = monitorFun(arguments);  
        //alert(ret+""+(ret==true));  
        if(ret==true){  
            //准备生成参数  
            //声明变量  
            var evText = "";  
            //参数格式  
            var csText = "";  
            for(var a = 0;a<arguments.length;a++){  
                evText+="var a"+a + "="+ "arguments["+a+"];"  
                csText+="a"+a+(a==0?"":",");  
            }  
            eval(evText);  
            return eval("funTemp("+csText+")");  
        }  
        return ret;