Обработчики DOMEvent традиционно вызываются с элементами, в которых они зарегистрированы как context / "this". Это то, что делает jQuery тоже.
Самый простой вариант для вас - использовать возможность jQuery для обработки данных о событиях
var MyClass = Class.create({
initElements: function(sumEl) {
this.sumEl = sumEl;
sumEl.bind("keyup", this, this.updateSumHandler);
},
updateSumHandler: function(event) {
// event.data is the initial this
// call updateSum with correct context
event.data.updateSum.call(event.data);
},
updateSum: function() {
// does something here
}
});
Другая возможность - использовать замыкания для определения updateHandler внутри конструктора
var MyClass = Class.create({
initElements: function(sumEl) {
this.sumEl = sumEl;
// save this as that so we can access it from the anonymous function
var that = this;
sumEl.keyup(function()
{
that.updateSum();
});
},
updateSum: function() {
// does something here
}
});
Это рабочий пример того, что пытался сделать один из других ответов. Это работает, потому что анонимная функция всегда может получить доступ к переменным в окружающей функции, но она работает только в том случае, если функция действительно определена в функции, в которой «то» является локальной переменной.