关于绑定事件

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));

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

 

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

 

 

posted on 2012-10-24 15:24  zhrj000  阅读(132)  评论(0编辑  收藏  举报