Gültigkeitsbereich von Variablen

Operator_Jon

Erfahrenes Mitglied
Hey Leute :)!

Also, als grobes Konzept sei folgendes gegeben:
Code:
function funktion1() {
	this.test = "test";
	
	this.funktion2 = funktion2;
}

function funktion2() {
	//Hier kommt jetzt ein wenig Ajax-Kram
	//Wichtig ist dann folgendes:
	ajaxVar.onreadystatechange = function() {
		alert(this.test);
	}
}

Ich kann leider nicht mehr auf das this.test zugreifen, jedenfalls nicht mehr innerhalb einer weiteren Funktion in der funktion2()!
Ich möchte aber gerne auch in dieser Funktion auf die this.* Variablen zugreifen können...
Kann man da was dran drehen?
(Ich hoffe meine Frage ist verständlich!)

Danke und Gruß
 
Hi,

vielleicht hilft es weiter, wenn Du eine zusätzliche Variable in funktion2 definierst, der Du den this-Wert zuweist.
Code:
function funktion2() {
  var varHelp = this;

  //Hier kommt jetzt ein wenig Ajax-Kram
  //Wichtig ist dann folgendes:
  ajaxVar.onreadystatechange = function() {
    alert(varHelp.test);
  }
}
Ciao
Quaese
 
Hallo,

das Schlüsselwort this bezieht sich innerhalb einer Funktion immer auf den „Eigentümer“ dieser Funktion. Bei einer normalen Funktionsdeklaration ist dies das window-Objekt.

Die Funktion onreadystatechange gehört in diesem Beispiel allerdings dem Objekt, das von ajaxVar referenziert wird.

Warum benutzt du hier überhaupt das Schlüsselwort this? Lass es einfach in beiden Funktionen weg, dann sollte es klappen.

Grüße,
Matthias
 
Weil es eine Art von angepasster Ajax-Klasse werden soll, Prototype z.B. erfüllt nämlich nicht ganz genau die Ansprüche die ich bräuchte!
Soll heißen das das Ajax-Objekt in der "Grundfunktion" festgelegt wird, mittels einer Funktion.
Da steht dann so etwas wie:
this.AO = null;
this.createAO = createAO;
In der Funktion createAO wird dem this.AO ein xmlHttpRequest zugewiesen, diese Variable will ich halt auch in der "Unterfunktion" von der 2ten Funktion nutzen, nur klappt dies eben nicht :(!

Nach deinen Ausführungen ist es also nicht möglich!?

Danke
 
Zuletzt bearbeitet:
Hallo,

bin mir jetzt nicht sicher, ob ich alles richtig verstanden habe, aber vielleicht suchst du ja sowas:
Javascript:
function Ajax() {};

Ajax.prototype = {
  test: 'test',
  AO: null,
  
  createAO: function() {
    var self = this;
    this.AO = new XMLHttpRequest();
    this.AO.onreadystatechange = function() {
      self.readyStateChanged();
    }
  },
  
  readyStateChanged: function() {
    alert(this.test);
  },
  
  get: function(url) {
    this.AO.open('GET', url, true);
    this.AO.send(null);
  }
};

a = new Ajax();
a.createAO();
a.get('http://localhost/');

Grüße,
Matthias
 

Neue Beiträge

Zurück