OOP in JavaScript

Global

Variablen und Funktionen welche Ausserhalb von Konstruktor - Funktionen und Methoden definiert werden sind global verwendbar. Sie sind ohne vorangehendes Schlüsselwort var zu definieren, ausserdem sind sie automatisch eine Eigenschaft des window Objekt. Ausserhalb des Funktionskontextes zeigt this wie auch self auf ebendieses window Objekt.

alert(this == self && this == window) // true

this.myGlobal = "global";

alert(myGlobal) // "global"
alert(this.myGlobal); // "global"
alert(self.myGlobal); // "global"
alert(window.myGlobal); // "global"

delete this.myGlobal;

this.myClass = function(){ 
	myGlobal = "global";
}

this.demo = new myClass();

alert(this.myGlobal) // "global"

Somit können auch globale Variablen als assoziatives Array angesprochen werden. Dies gibt uns beispielsweise die Möglichkeit eine Funktion zu schreiben welche globale Variablen setzt bzw. ausliest.

this.setGlobalVar = function(name,value){
	this[name] = value;
}

this.getGlobalVar = function(name){
	return this[name];
}

this.setGlobalVar("global","somevalue");

alert(this.getGlobalVar("global")); // "somevalue"

Lokal

Lokale Variablen oder Funktionen sind nur in der jeweiligen Funktion in der sie definiert werden gültig. Ihnen wird mit Hilfe des Schlüsselwortes var einen Wert zugewiesen. Der JavaScript - Interpret erzeugt beim Funktionsaufruf ein temporäres Objekt in welchem die übergegeben Parameter mit dem arguments Objekt sowie die lokalen Eigenschaften gespeichert werden. Nach verlassen der Funktion wird dieses Objekt gelöscht und die darin enthaltenen Daten gehen verloren.

this.somefunction = function(){
	var local = "local";
}

this.somefunction();

alert(local) // error

Bei verschachtelten Funktionen, haben die inneren immer Zugriff auf die lokalen Eigenschaften und Parameter der jeweiligen äusseren Funktion.

sayHello = function(name){

	var local = "Hello";

	var demo = function(){
		return local + " " + name;
	}
	
	return demo();
}

alert(sayHello("marc")); // "Hello marc"