var addEvent = function( obj, type, fn ) {
if (obj.addEventListener)
obj.addEventListener( type, fn, false );
else if (obj.attachEvent) {
obj["e"+type+fn] = fn;
obj.attachEvent( "on"+type, function() {
obj["e"+type+fn]();
} );
}
};obj["e"+type+fn] = fn;这句是什么意思。
obj.attachEvent( "on"+type, function() {
obj["e"+type+fn]();//这里直接换成fn也可以执行,为什么要这样写
} javascript
fn.call(obj);
} );
另一个原因,真如二楼所说:var addEvent = function (obj, type, fn) {
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent) {
obj["e" + type + fn] = fn;
// alert(obj["e" + type + fn]); // eclickfunction{//code}
// alert("e" + type + fn);
obj.attachEvent( "on"+type, function() {
obj["e"+type+fn]();
} );
}
};
function removeEvent( obj, type, fn ) {
if ( obj.detachEvent ) {
alert('on'+type);
alert(typeof obj[type+fn]);
obj.detachEvent('on'+type, obj["e"+type+fn]);
obj["e"+type+fn] = null;
} else
obj.removeEventListener( type, fn, false );
}
this 指向有问题是ie实现的bug,需要特别处理,而addEventlistener指向是正确的指向,是标准的事件绑定方法,所以不用特别处理。