var handler = {
message: "Event handled",
handleClick: function (event) {
alert(this.message);
}
};
var btn = document.getElementById("my-btn");
EventUtil.addHandler(btn, "click", function (event) {
handler.handleClick(event);//此处请问为什么会弹出Event handled
});
js 闭包 函数绑定

解决方案 »

  1.   

    点击时 handleClick的上下文是handler,即函数里的this=handler,
    所以弹出handler的message 'Event handled'.
      

  2.   


    var handler = {
        message: "Event handled",
        handleClick: function (event) {
            alert(this.message);
        }
    };
    var btn = document.getElementById("my-btn");
    EventUtil.addHandler(btn, "click", handler.handleClick);这个是没有闭包版本,为什么是undefined
      

  3.   


    var handler = {
        message: "Event handled",
        handleClick: function (event) {
            alert(this.message);
        }
    };
    var btn = document.getElementById("my-btn");
    EventUtil.addHandler(btn, "click", handler.handleClick);这个是没有闭包版本,为什么是undefined
    这个时候,函数handleClick的上下文是html元素(#my-btn),也就是说点击后函数执行时 this=元素#my-btn,因为#my-btn并没有message的属性,所以就弹出'undefined'了
      

  4.   

    1:你这不是闭包
    2.你这个就相当于 $(event).live("click",function(){ aa();});
    function aa()
    {
      alert("Event handled");
    }
      

  5.   


    var handler = {
        message: "Event handled",
        handleClick: function (event) {
            alert(this.message);
        }
    };
    var btn = document.getElementById("my-btn");
    EventUtil.addHandler(btn, "click", handler.handleClick);这个是没有闭包版本,为什么是undefined
    这个时候,函数handleClick的上下文是html元素(#my-btn),也就是说点击后函数执行时 this=元素#my-btn,因为#my-btn并没有message的属性,所以就弹出'undefined'了你好。请问第一个的时候为什么上下文是handler?谢谢
      

  6.   


    var handler = {
        message: "Event handled",
        handleClick: function (event) {
            alert(this.message);
        
    };
    var btn = document.getElementById("my-btn");
    EventUtil.addHandler(btn, "click", handler.handleClick);这个是没有闭包版本,为什么是undefined
    这个时候,函数handleClick的上下文是html元素(#my-btn),也就是说点击后函数执行时 this=元素#my-bt因为#my-btn并没有message的属性,所以就弹出'undefined'了
    明白了。谢谢
      

  7.   


    var handler = {
        message: "Event handled",
        handleClick: function (event) {
            alert(this.message);
        }
    };
    var btn = document.getElementById("my-btn");
    EventUtil.addHandler(btn, "click", handler.handleClick);这个是没有闭包版本,为什么是undefined
    这个时候,函数handleClick的上下文是html元素(#my-btn),也就是说点击后函数执行时 this=元素#my-btn,因为#my-btn并没有message的属性,所以就弹出'undefined'了你好。请问第一个的时候为什么上下文是handler?谢谢第一个的时候,你绑定的click事件函数是包含handler.handleClick(event)的匿名函数function(event){//...},匿名函数里的this是#my-btn,但是handler.handleClick是访问不到这个this的,它的this仍然是handler对象。第二个的时候,你绑定的click事件函数才是handler.handleClick函数本身,所以它里面的this就是#my-btn了。