Witam,
ostatnio zabrałem się za napisanie pewnej klasy, wykorzystującej obiekty XMLHttpRequest. Klasa ta posiada tablicę, w której tworzone są nowe obiekty klasy c_XMLHttpRequest, która z kolei jest niejako "obudową" dla XMLHttpRequest (zawiera w sobie obiekt tej klasy). Przedstawie w skrócie kod:
function c_XMLHttpRequest(aAjax)
{
this._onReadyStateChange = function () {
this.fAjax._onReadyStateChange(this);
}
this.fAjax = aAjax; // referencja do obiektu klasy głównej
this.xhr = // tu tworzony jest nowy obiekt XMLHttpRequest
this.xhr.onreadystatechange = this._onReadyStateChange;
}
Problem: chciałbym w jakiś sposób uzyskać dostęp do całego obiektu c_XMLHttpRequest, gdy zajdzie zdarzenie onreadystatechange w obiekcie xhr. Powyższy kod niestety nie działa, this zawiera jedynie kod metody _onReadyStateChange. Można to obejść stosując zmienną globalną (czego właśnie chcę uniknąć) i w niej przechowywać te obiekty, wtedy wygląda to mniej więcej tak:
var xhrArray = new Array(), nextIndex = 0;
function c_XMLHttpRequest(aAjax)
{
this._onReadyStateChange = function () {
this.fAjax._onReadyStateChange(this);
}
this.fAjax = aAjax; // referencja do obiektu klasy głównej
this.xhr = // tu tworzony jest nowy obiekt XMLHttpRequest
this.index = nextIndex;
this.xhr.onreadystatechange = new Function(
"xhrArray["+(nextIndex++)+"]._onReadyStateChange();"
);
}
Pomijam tworzenie obiektów i wysyłanie żądań przez XMLHttpRequest, chodzi o samo zdarzenie zmiany stanu. Nie chcę używać zmmiennej globalnej, ale nie wiem jak dostać się do obiektu c_XMLHttpRequest (lub chociaż obiektu XMLHttpRequest, który je wywołał) podczas wywołania tego zdarzenia.
W razie gdyby coś było niezrozumiałe, prosze pytać. Kod pisałem na sucho, jedynie dla przykładu.