Hauptmenü

Untermenü

OOP mit JavaScript - Konstruktorfunktionen

1. Und nochmal

... der Hinweis

Ich benutze hier sehr oft die Begriffe "Methoden" und "privat". Das mache ich aber nur wegen des Verständnisses. Die Gründe dazu habe ich ja schon hier erläutert.

2. Grundsätzliches

Wie ich zu Beginn schon sagte, kennt JavaScript keine Klassen. Wenn man aber Daten, so wie man es aus anderen Sprachen kennt, sauber kapseln möchte, so ist dies die meiner Meinung nach einzige praktische Möglichkeit, das auf eine gewohnte Art und Weise zu tun. Ich habe mir daher auch angewöhnt, hier von "Pseudoklassen" zu reden.

3. Der Aufbau

Eine Konstruktorfunktion ist zunächst mal nur eine pisselige und stinknormale Funktion, die erst durch die Art des Aufrufs zu diesem besonderen Konstrukt wird.


function Konstruktor() 
{
  ...
}
var obj = new Konstruktor;

Erläuterung

Da das doch ziemlich seltsam aussieht, versuche ich den Code mal so zu erklären. Die Funktion Konstruktor stellt eine Art von Container dar, der Methoden und Eigenschaften für ein Objekt bereitstellt. Das ist also vergleichbar mit den sonst üblichen Klassen. Mit var obj erstellen wir nun ein Instanz/Referenz des Konstruktors. Wir haben also ein Objekt erzeugt, das Zugriff auf die Eigenschaften und Methoden der Konstruktorfunktionen hat.

4. Der Unterschied

In Sprachen wie PHP gibt es ja die magische Methode __construct. Sie wird automatisch aufgerufen, wenn man beim Erzeugen eines Objektes Parameter an die Klasse übergibt. In JavaScript ist das ein wenig anders. Hier kann man Parameter übergeben, muss es aber nicht. Es ist trotzdem eine Konstruktorfunktion. Auch wenn der Ausdruck doch ziemlich unglücklich ist.

Parameter

Wenn man denn nun welche übergeben möchte, so muss die Konstruktorfunktion sie "bereitstellen". Also im Gegensatz zu PHP so.


function Konstruktor(val) 
{
  ...
}
var obj = new Konstruktor('blubb');

5. Eigenschaften und Methoden

So Leute, jetzt wird es echt kompliziert. Und das ist wohl auch einer der Gründe, warum viele JavaScript nie so ganz begreifen werden. Meine Wenigkeit eingeschlossen. Also! In "normalen" Sprachen gibt es Methoden und Eigenschaften, die über die Sichtbarkeitsstufen private, protected, public und static verfügen.

In JavaScript gibt es privilegierte, öffentliche, globale oder anonyme Funktionen, Closures, öffentliche und pseudo-private Eigenschaften sowie eingeschlossene Literalobjekte und was weiß ich nicht noch alles. Dazu kann man unterschiedlichste Methoden auch noch beliebig tief verschachteln und die Sache mit den Zugriffsrechten ist dementsprechend kompliziert.

6. this

Hinzu kommt auch noch, dass die Verwendung von this abhängig vom Kontext ist, in der es verwendet wird. Allerdings ist dieses Tohuwabohu das Ergebnis einer meiner Meinung nach völlig idiotischen Spezifikation von ECMA-Script, auf die JavaScript (bekanntlicherweise) aufbaut. Entweder hat da jemand gepennt, sich vorher das Hirn mit zu viel Alkohol weggeballert oder der Typ war ein Sadist. Egal, ich versuche jetzt, euch mit den Prinzipien vertraut zu machen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt