今天无聊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;
//alert("拦截成功!");
};
parentObj[funName]=ljFun;
}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="JRY.js"></script>
<script type="text/javascript">
//普通的方法
function test(text){
alert(text);
}
//调用监听方法
monitor("test",function(cs){
alert("监听到调用:\n参数:"+cs[0]);
//修改参数
cs[0] = "我是JRY";
return true;
});
//对象
function Obj(){
function test(){
return("我是JRY");
}
}
var obj = new Obj();
//调用监听方法
obj.monitor("test",function(cs){
//当返回值不是true的时候,将不会调用被监听的方法
return "我不是JRY";
});
</script>
</head>
<body>
<button onclick="test('无聊的人')">普通方法</button>
<button onclick="alert(obj.test())">对象方法</button>
</body>
</html>
if (ret == true) {
return funTemp.apply(parentObj, arguments);
}