这块,用firebug查看了下,产生了闭包,一直存在堆栈上不释放,导致卸载了mousemove,mouseup后,又移动的话会触发进入产生的这个闭包事件,该如何解决呢?
addEvent:function(oTarget,name,funName){
var args = Array.prototype.slice.call(arguments).slice(3);
var regHandler=funName
if(args.length>0){
regHandler=function(e){
return funName.apply(this,[e||window.event].concat(args));
}//这里的regHandler产生了个闭包,一直在堆栈中存在,该怎么解决呢?
}
if(oTarget.addEventListener){
oTarget.addEventListener(name,regHandler,false);
}
else{
oTarget.attachEvent("on"+name,regHandler);
}
},
楼主是想让handler能够带上addEvent的第4到n位参数执行对吧?稍微修改了下
1 var a = {
2 log: function () {
3 console.log(this);
4 console.log(arguments);
5 console.log(event);
6 },
7 addEvent: function(oTarget,name,funName){
8 var args = Array.prototype.slice.call(arguments).slice(3);
9
10 if(oTarget.addEventListener){
11 oTarget.addEventListener(name,bind(funName, args),false);
12 }
13 else{
14 oTarget.attachEvent("on"+name,bind(funName, args));
15 }
16 }
17 };
18
19 // 这里的bind是关键
20 function bind(fn, args, context) {
21 return function () {
22 fn.apply(context || this, args);
23 }
24 }
25
26 a.addEvent(document.getElementById('btn'), 'mouseup', a.log);
可以不用閉包