寻址JavaScript事件处理程序中的对象函数

时间:2012-02-13 00:04:56

标签: javascript class event-handling this

假设我有一个像这样的JavaScript类:

Foo.prototype = {
  init: function() {
    $(document).keydown(function(event) {
      this.onKeyDown(event);
    });
  }

  onKeyDown: function(event) {
    alert("bar");
  }
}

myObj = new Foo();
myObj.init();

此代码不起作用,因为在

$(document).keydown(function(event) {
    this.onKeyDown(event);
});

'this'当然是未知的,并没有解决这个问题。我怎么能解决Foo-Class的onkeydown方法?

我不希望用'myObj'(对象的名称)交换'this',因为我可能想将该类用于其他对象。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

将其存储在变量中......

Foo.prototype = {
  init: function() {
    var self = this
    $(document).keydown(function(event) {
      self.onKeyDown(event);
    });
  }
}

或使用jQuery.proxy返回this值绑定的函数...

Foo.prototype = {
  init: function() {
    $(document).keydown( $.proxy(function(event) {
      this.onKeyDown(event);
    }, this) );
  }
}

或者您可以使用Function.prototype.bind,但是您需要为旧浏览器修补它。

Foo.prototype = {
  init: function() {
    $(document).keydown( (function(event) {
      this.onKeyDown(event);
    }).bind(this) );
  }
}