Это общая проблема при использовании методов экземпляра в качестве обратных вызовов в JavaScript. Я использую эту функцию, чтобы создать замыкание для вызова метода, привязанного к правильному экземпляру:
function bound_method(instance, method) {
return function() {
return method.apply(instance, arguments);
};
}
Тогда вы можете использовать это как ваш обратный вызов вместо this.foo:
bound_method(this, this.foo)
В отличие от некоторых других предложений, это позволяет поместить методы в прототип, а не создавать их в конструкторе. Таким образом, у вас есть только одна общая копия реализации вместо повторного создания этих функций для каждого нового экземпляра панели.
var bar = function() {};
$.extend(bar, {
baz: function() {
this.input = $('.input');
this.input.bind("keydown keyup focus blur change",
bound_method(this, this.foo));
},
foo: function(event) {
console.log(this);
}
});