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

解决方案 »

  1.   

    没什么意思啊,就是给obj新加一个属性,这个属性名是"e"+type+fn,指向fn方法。调用这个属性,后面再加上(),效果等同于fn()
      

  2.   

    至于为什么要这样写,个人理解应该是保证fn方法中的this是指向obj的。这两行也可以替换成:                obj.attachEvent( "on"+type, function() {
                        fn.call(obj);
                    } );
      

  3.   

    帅哥,这个个人理解主要是在addEvent的时候在把一个标志绑定在obj,绑定这个标志的目的是为了在removeEvent的时候好删除绑他。
    另一个原因,真如二楼所说: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 );
    }
      

  4.   

    还想再问一下addEventlistener为什么不用定向this的指针
      

  5.   

    attachEvent
    this 指向有问题是ie实现的bug,需要特别处理,而addEventlistener指向是正确的指向,是标准的事件绑定方法,所以不用特别处理。