zoukankan      html  css  js  c++  java
  • 关于绑定事件

    var handler={
        message:"Event handled",
        handleClick:function(event){
            alert(this+" "+this.message);
        }
    }

    关于绑定事件,我一直都是这样绑的:

    EventUtil.addHandler(btn,"click",function(event){
    
      handler.handleClick(event);
    
    });

    通过创建闭包,会使代码变得难以理解和调试,如果没有用到闭包,那么handleClick()里面的this(this是由调用者提供的,调用者就是其父上下文)就将是btn而不是handler了,闭包可以把它的执行环境保存起来

    用bind()来创建一个保持了执行环境的函数:

    var bind=function(fn,context){
        return function(){
            return fn.apply(context,arguments);
        }
    };

    利用apply,将fn的执行环境绑定为context,这样就不会有handler里面this错乱之忧了

    EventUtil.addHandler(btn,"click",bind(handler.handleClick,handler));

    不过开销就是需要更多的内存。。

    关键还是在于执行环境的问题

  • 相关阅读:
    6.20 委托
    6.20 VAR 万能变量
    LINQ查询
    LINQ基本语句
    母版页
    分页+组合查询
    Document
    Select查询语句1
    Cookie对象
    Session对象
  • 原文地址:https://www.cnblogs.com/zhrj000/p/2737236.html
Copyright © 2011-2022 走看看