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
    收藏
    关注
    评论
  • 相关阅读:
    ML与NLP的2019年度总结与展望
    python在文本开头插入一行的实例
    Git Notes
    warmup 预热学习率
    python error整理
    python 中字符串处理
    集成学习voting Classifier在sklearn中的实现
    机器学习 评价指标整理
    PaddlePaddle Notes
    linux 常用指令 文件操作trick等
  • 原文地址:https://www.cnblogs.com/thinksley/p/2792258.html
Copyright © 2011-2022 走看看