In Teil 1 versuchte ich zu erklären, dass Javascript doch nicht so schlecht ist, wie viele behaupten und das sich die Sprache doch sehr deutlich von Java und PHP unterscheidet. Im heutigen Teil werde ich Konstrukte zeigen, womit man die Visibilität in Objekten bei Javascript definieren kann.
Als erstes ein Sourcecode Beispiel:
var Auto = function(startBenzin) { //constructor //public variable this.benzinStand = startBenzin; //private variable var anzahlRaeder = 4; //global variable globalBlubb = 17; //public function this.schaueBenzin = function() { return "Der Benzinstand beträgt "+this.benzinStand+" Liter"; }; //private function var gasGeben = function() { this.benzinStand--; }; };
Wenn ich nun ein Objekt mittels
var golf = new Auto(5);
erzeuge, passiert folgendes:
Konstruktor
Der “Konstruktor” wird aufgerufen. Die Funktion, welche der Variablen Auto zugewiesen wurde, wird nun durchlaufen. Alle Variablen erhalten nun einen Wert (this.Benzinstand, anzahlRaeder, globalBlubb) und es werden Variablen neue Funktionen zugewiesen (this.schaueBenzin, gasGeben). Am Ende der Instanzierung ist der Typ von der Variable golf == object.
public
Alle Variablen und Funktionen, welche mit this.Variablenname erzeugt werden, sind public und können wie in anderen Sprachen von aussen z.B. mittels golf.schaueBenzin() aufgerufen werden.
private
Alle Variablen und Funktionen, welche mit var Variablenname erzeugt werden, sind private und können nur vom instanzierten Objekt selber aufgerufen werden.
global
Achtung! Variablen, welche überhaupt nicht deklariert werden (in diesem Fall globalBlubb) sind global, das heisst, obwohl sie im Objekt definiert wurden, haben sie im DOM Baum keine Referenz mehr auf golf und stehen im DOM Baum auf der oberstene Ebene.
Der Hinweis unter „global“ auf den DOM-Baum ist irreführend. Das globale Objekt existiert in JavaScript immer, auch ohne DOM-Implementierung. Auch in Browsern ist üblicherweise
document
die DOM-Wurzel und nicht identisch mit dem globalen Objekt, das ist normalerweisewindow
(muss aber auch nicht sein).