Другое простое решение - привязать к нему вашу функцию onreadystatechange. bind
-ing функция делает по существу то же самое, что и в ответе CMS (то есть добавляет значение к закрытию), но bind
делает это прозрачным образом: вы продолжаете использовать this
вместо установки instance
переменная.
Вот реализация Function#bind
, если в вашей кодовой базе ее нет:
Function.prototype.bind = function(obj) {
var __method = this;
var args = []; for(var i=1; i<arguments.length; i++) args.push(arguments[i]);
return function() {
var args2 = []; for(var i=0; i<arguments.length; i++) args2.push(arguments[i]);
return __method.apply(obj, args.concat(args2));
};
}
А вот как вы можете использовать его в своем коде:
myObject.prototype = {
ajax: function() {
this.foo = 1;
var req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {
if(req.status == 200) {
alert(this.foo); // reference to this is *kept*
}
}
}.bind(this) // <- only change
}
};