zoukankan      html  css  js  c++  java
  • 封装事件绑定函数解决this在ie下的绑定问题

    封装一个事件绑定函数

    function addEven(obj,type,fn)
    {
       if(obj.attachEvent)
     {
       obj.attachEvent('on'+type,fn); 
      }
     else
     {
       obj.addEventListener(type,fn,false); 
     }
    }

    在ie下弹出this的时候不会弹出标签对象本身,而是弹出window,先来看看call()方法:函数的调用如a();实际上等同于a.call();

    例如有这样一个函数function a(){alert(this)}  这时结果是window,如果这样调用a.call('aaa');会弹出aaa,也就是说call里面的变量会改变函数this的值。

    因此封装绑定函数就可以调用call,这样来做

    function addEven(obj,type,fn)
    {
       if(obj.attachEvent)
     {
       obj.attachEvent('on'+type,function(){
          fn.call(obj)//里面的this的值变成obj 变成当前调用的标签对象
        }); 
        }
     else
     {
       obj.addEventListener(type,fn,false); 
     }
    }

    再进一步用三目运算优化就可以这样做

    function addEven(obj,type,fn)
    {
      return obj.attachEvent ? obj.attachEvent('on'+type,function(){fn.call(obj)}) : obj.addEventListener(type,fn,false); 
    }

    搞定

    Top
    收藏
    关注
    评论
  • 相关阅读:
    如何保证service不被系统杀死
    查找算法
    java多线程学习
    设计模式-单例
    Python2.7-内置类型
    Python2.7-内置函数
    准备要学的东西
    Python-2.7 : 编码问题及encode与decode
    【JZOJ4637】大鱼海棠【博弈论】
    【JZOJ4637】大鱼海棠【博弈论】
  • 原文地址:https://www.cnblogs.com/thinksley/p/2792258.html
Copyright © 2011-2022 走看看