• JavaScript DOM在对象上注册事件监听器__John Resig的addEvent()方法解析


    http://blog.csdn.net/sykent/article/details/7879103

    /绑定事件
    function addEvent( obj, type, fn ) {
        if ( obj.attachEvent ) {
            obj['e'+type+fn] = fn;
            obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
            obj.attachEvent( 'on'+type, obj[type+fn] );
        } else
            obj.addEventListener( type, fn, false );
    }
    
    //移除事件
    function removeEvent( obj, type, fn ) {
        if ( obj.detachEvent ) {
            obj.detachEvent( 'on'+type, obj[type+fn] );
            obj[type+fn] = null;
        } else
            obj.removeEventListener( type, fn, false );
    }

    一,  obj['e' + type + fn] = fn的作用

          因为在IE中, 事件侦听器即事件处理函数内部的this默认指向window对象. W3C中指向所绑定的对象本身.

        因此为了使事件处理函数内部的this指向所绑定的对象,可以将函数赋值为该对象的某个属性成为他的方法,那么this指针就指向了所绑定的对象本身.

     

    二, 为什么不直接

         obj.attachEvent('on' + type, obj['e' + type + fn]);

           因为IE默认的事件对象为window.event,

        而W3C则是作为参数传入如function(W3CEvent) { //其中W3CEvent为事件对象 }.

        为了使得事件处理函数统一为function(theSameEvent) {} 同一传入事件对象. 那么IE则要把window.event传入

        即可以用函数包装. 也就有了function(){  obj['e' + type + fn](window.event); }

     

    三, 为什么不直接

         obj.attachEvent('on' + type, function(){

                obj['e' + type + fn](window.event); 

         });

         因为方便移除事件的考虑, obj[type + fn]可以获得对事件处理函数的引用.

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/vico/p/2922696.html
Copyright © 2020-2023  润新知