如何在初始化函数中将原型函数添加到事件侦听器?

Blo*_*ust 6 html javascript oop prototype

我不确定如何说出我的问题,所以让我举一个例子:

function foo() {
  window.addEventListener("keydown", function(event) {
        bar(event.keycode);
}

foo.prototype.bar = function (keycode) {
//code
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用this.bar(),但这会导致使用windowas this.有没有办法做到这一点,还是我必须手动调用另一个初始化方法?

Esa*_*ija 7

绑定this.barthis你通过它之前.

function foo() {
    window.addEventListener("keydown", this.bar.bind(this), false);
}


foo.prototype.bar = function (event) {
    console.log(event.keyCode);
}
Run Code Online (Sandbox Code Playgroud)

演示http://jsfiddle.net/2tee4/


zzz*_*Bov 5

如果您没有Function.prototype.bind可用的*,并且您不愿意添加额外的功能,Function.prototype那么可以通过以下方式关闭以下呼叫this.bar:

function foo() {
    var self;
    self = this;
    window.addEventListener('keydown', function (e) {
        self.bar(e);
    }, false);
}
foo.prototype.bar = function (e) {
    console.log(e.keyCode);
}
Run Code Online (Sandbox Code Playgroud)

*虽然你的使用addEventListener没有attachEvent让我相信这Function.prototype.bind是一个可以接受的选择


另外,像jQuery 这样的库jQuery可能包括它们自己的形式.bindjQuery.proxy