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));
不过开销就是需要更多的内存。。
关键还是在于执行环境的问题