molily: lokale Variablen im Konstruktor

Beitrag lesen

Hallo,

Ich deklariere lokaleVar, diese ist nirgendwo anders als innerhalb des Codeblocks von MeinConstructor () zugänglich. Und doch kann ich sie noch später in einer nested function bei x.func(); erreichen. Was denkt sich denn der Interpreter dabei? Woher weiß er, dass lokaleVar noch beibehalten werden soll? Mich interessiert doch nur, wie das intern funzt.

Ich würde die Privilegien einer »priviligierten« Methode so erklären:

Die Konstruktorfunktion hat einen eigenen Scope mit lokalen Variablen, pipapo. Wenn man nun in der Konstruktorfunktion eine andere Funktion notiert, wirkt diese als Closure und schließt in ihrem Scope hat man somit Zugriff auf alle lokalen Variablen des Scopes der Konstruktorfunktion.

Das ist also keine Eigenheit von Konstruktorfunktionen und darin über this im gegenwärtigen Objekt gespeicherten sog. priviligierten Methoden, sondern funktioniert bei allen anderen Funktionen auch. Eine Konstruktorfunktion ist auch nichts anderes als eine Funktion, in der »this« auf das kreierte Objekt zeigt.

*Wo* also die Funktion, die im Konstruktor notiert wird, gespeichert wird, ist nicht relevant. Man kann sie im this-Objekt speichern, aber auch irgendwo anders. Sie wirkt trotzdem als Closure und schließt den Konstruktor-Scope ein:

function f1 () {  
   var lokal = "bla";  
   window.f2 = function () { alert(lokal); }  
}  
var instanz = new f1;  
f2();

Das geht wie gesagt auch ganz ohne new:

function f1 () {  
   var lokal = "bla";  
   window.f2 = function () { alert(lokal); }  
}  
f1();  
f2();

Priviligierte Methoden sind also nichts anderes als im Konstruktor definierte Closures.

Nicht-priviligierte Methoden sind all jene, die außerhalb des Konstruktors definiert wurden und demnach keinen Zugriff auf dessen Scope haben.

Insofern unterscheidet JavaScript nicht extra zwischen priviligierten und nicht-priviligierten Methoden, sondern es handelt sich einfach um das allgemeine Feature der Closures.

Mathias