molily: Verständnisproblem bei OOP mit Javascript

Beitrag lesen

Hallo,

Nur aus interesse: wie sorge ich dafür, dass eine Methode von außen nicht aufrufbar ist?

Wenn ein Funktionsobjekt an einem Objekt (z.B. an der Instanz) hängt, dann ist diese Funktion auch von überall aufrufbar, wo man auf das Objekt zugreifen kann. Das einzige, was man also machen kann, ist, das Funktionsobjekt nicht an die Instanz zu hängen.

»Private« Methoden wie in anderen OOP-Sprachen gibt es nicht direkt in JavaScript. Man kann denselben Effekt aber um drei Ecken herum nachbauen.

Private Methoden sind Methoden, die eben nur in der Konstruktorfunktion selbst sowie von priviligierten (das sind im Konstruktor definierte) Methoden aufgerufen werden können.

Wie sorgt man nun für solche private Methoden? Indem man sie einfach als lokale Variablen im Konstruktor notiert:

function Konstruktorfunktion () {  
   var meineKleinePrivateMethode = function () { alert("Möp."); };  
   meineKleinePrivateMethode(); // Hier gehts.  
   this.oeffentlicheMethode = function () {  
      meineKleinePrivateMethode(); // Hier gehts auch. Warum? Weil die verschachtelte Funktionen Zugriff auf die lokalen Variablen der äußeren Funktion haben. Das nennt sich [link:http://aktuell.de.selfhtml.org/artikel/javascript/organisation/index.htm#closures@title=Closures].  
   };  
}  
var instanz = new Konstruktorfunktion;  
alert(instanz.meineKleinePrivateMethode); // gibbet nich, die Methode hängt nicht an der Instanz.  
instanz.oeffentlicheMethode(); // Das geht, weil die Methode an das Instanzobjekt geklebt wurde.

Siehe auch Woher kommen die Privilegien von priviligierte Methoden?

Mathias