Два варианта:
1) У getData
принять параметр контекста (обычно называемый context
или thisArg
) и использовать callback.apply(context, ...)
или callback.call(context, ...)
для его вызова.Итак:
function getData(callback, context) {
// ...when it's time to call it:
callback.call(context, arg1, arg2);
// or
callback.apply(context, [arg1, arg2]);
}
2) Создайте функцию, которая при вызове развернется и вызовет исходный обратный вызов с this
, установленным на правильное значение.(Это иногда называют «привязкой».)
Например, используя явное замыкание:
this.fetchData = function()
{
var self = this;
alert(this.a);
getData(getDataCallback);
function getDataCallback(arg1, arg2) {
self.processData(arg1, arg2);
}
}
Или используйте для этого универсальную функцию bind
(которая также включаетзамыкание, но в хорошем контролируемом контексте, поэтому оно не закрывает ненужные вещи).См. Ссылку ниже для примера простой функции bind
.
Подробнее: Вы должны запомнить this