Martin Jung: Globale Variablen in einer function erzeugen.

Beitrag lesen

Hi Simy,

hier gibt es wohl ein paar Missverständnisse.

Beispiel:
<script language="JavaScript">

function TestObj(einName){
 /*
 Dies ist eine Funktion mit besonderer Bedeutung. Da durch
 sie ein Objekt angelegt oder "konstruiert" wird, bezeichnet man sie auch als den "Konstruktor" des Objekts.
 */
 this.name = einName;
 /*
 Die Eigenschaft 'name' dieses Objekts ist eine Variable, der in diesem Fall der Wert der Parametervariablen 'einName' zugewiesen wird. 'name' ist implizit eine Variable, auch OHNE bei der Deklaration/Initialisierung den Bezeichner "var" verwendet zu müssen!
 Die Parametervariablen sind übrigens auch LOKALE Variablen.
 */

this.GibNamen = GibNamen; // (ohne Klammern)
 this.SetzeNamen = SetzeNamen;
 /*
 Die Eigenschaft 'GibNamen' dieses Objektes ist implizit eine Methode, da ihr - und nur deswegen - eine Funktion zugewiesen wurde.
 */
 alert(this.GibNamen());

var neuerName = "Müller";
 // dies ist eine lokale Variable, nur gültig in diesem Konstruktor oder allgemein Anweisungsblock.

this.SetzeNamen(neuerName);
 // oder: this.name = neuerName;
 alert(this.GibNamen());

// ACHTUNG: jetzt definierst Du eine GLOBALE Variable
 globalerName = "Schulz";

// ACHTUNG: jetzt definierst Du eine LOKALE Variable
 var lokalerName = "Schmitt";

} // end constructor

function GibNamen(){
  return this.name;
}

function SetzeNamen(einName){
  this.name = einName;
}

// Script-"Body"

/*
 Jetzt wird eine Instanz des Objektes erzeugt, dessen Eigenschaften zuvor im Konstruktor definiert wurden.
 */
 test = new TestObj("Paul Meier");
 /*
 test ist eine globale Variable, genauso geht:
 var test = new TestObj("Paul Meier");
 siehe dazu Thomas Mells Posting
 */

// jetzt greifst Du auf die GLOBALE Variable zu, die du im Konstruktor deklariert und initialisiert hast.
 test.SetzeNamen(globalerName);
 alert(test.GibNamen());

// jetzt greifst Du auf die LOKALE Variable zu, die du im Konstruktor deklariert und initialisiert hast.
 test.SetzeNamen(lokalerName);
 // SO, JETZT MÜSSTEST DU EINEN SCRIPTFEHLER ERHALTEN HABEN ;-)))

</script>

vielleicht ist es Dir jetzt etwas klarer geworden.

Grüße,
Martin