Hallo,
Ich habe in einer Klasse eine Funktion (clearBuffer) definiert die sowohl aus der Klasse heraus als auch von 'außen' aufgerufen werden soll. Das Problem ist, dass die Funktion entweder nur von außen oder nur aus der Klasse heraus aufrufbar ist - nie aber beides.
Doch, aber natürlich ist die Ansprechweise eine unterschiedliche.
Von »innerhalb«: this.methode()
Von »außerhalb«: Instanzname.methode()
Ein Problem gibt es nun bei Methoden, die zwar an der Instanz hängen bzw. im Konstruktor definiert wurden, aber tatsächlich nicht im Kontext der Instanz ausgeführt werden, sodass es kein Ansprechen »von innen« mehr ist.
Behelfsweise habe ich die Variable 'self' eingebaut in die ich im Konstruktor 'this' kopiere. Über diese Variable lässt sich die public-Funktion dann auch aus der Klasse heraus aufrufen, aber warum geht es nicht auch ohne diese Variable ?
Der readystatechange-Handler wird nicht im Kontext deiner httpRequest-Instanz ausgeführt, sondern im globalen Kontext. this zeigt also nicht auf deine Instanz, sondern auf window.
// Private Funktion
function onData()
onData wird zeitversetzt (»asynchron«) als readystatechange-Handler ausgeführt und hat damit die Verbindung zur Objektinstanz verloren, wenn mit »var self = this;« die Referenz nicht in die Funktion hinein vererbt hättest.
{ if(( xmlHttp.readyState == 4 )&&( xmlHttp.status == 200 ))
{ // Aufruf der öffentlichen Funktion über 'this'
self.clearBuffer( 'readData()' );
Das ist eine Möglichkeit, auf die Instanz zuzugreifen.
// Aufruf der öffentlichen Funktion. Klappt nicht!!!
clearBuffer( 'readData()' );
Hier hingegen wird letztlich window.clearBuffer() aufgerufen, und die Funktion gibt es nicht.
Was genau ist nun deine Frage? Du hast offenbar schon eine Lösungsmöglichkeit gefunden. Es gibt noch weitere andere Möglichkeiten, dazu empfehle ich dir diesen Artikel.
Mathias