JavaScript - OOP mit JavaScript - Prototypen
1. Das Konzept
Eingangs erwähnte ich schon, dass JavaScript zu den prototypenbasierten Sprachen zählt. Aber um was genau handelt es sich dabei eigentlich? Nun bei dieser Form der Programmierung will man den Entwicklern größtmögliche Freiheiten zugestehen und sie nicht mit Dingen quälen, wie sie in anderen Sprachen üblich sind. Ich gehe jetzt nur auf das Prinzip ein und nicht auf die Vor- und Nachteile.
Prototyping
... bedeutet einfach gesagt, dass man einer "Klasse" jederzeit Eigenschaften und Methoden hinzufügen kann. Die gelten dann für alle daraus erzeugten Objekte. Das ist die Form von Vererbung, wie sie JavaScript versteht.
2. Ein Beispiel
Wir basteln uns mal eine kleine "Klasse", das uns nett begrüßt. Ich denke, den folgenden Code brauche ich nicht mehr zu erläutern. Das sollte mittlerweile jedem klar sein. Das Ergebnis ist beim Aufruf ein freundliches 'Hallo'.
function meineKlasse ()
{
var nett = 'Hallo';
this.hallo = function ()
{
alert (nett);
}
}
var obj = new meineKlasse;
obj.hallo();
Da uns das Prototypen-Konzept von JavaScript aber sehr viele Freiheiten lässt, kann man nun meineKlasse
jederzeit um Eigenschaften und Methoden erweitern. Dazu reicht folgender Code aus:
// Eigenschaft hinzufügen
meineKlasse.prototype.nicht_nett = 'L***ck mich!';
// Methode hinzufügen
meineKlasse.prototype.ziehLeine = function ()
{
alert (this.nicht_nett);
}
var obj = new meineKlasse;
obj.ziehLeine();
Erläuterung
Mit dem Schlüsselwort prototype fügt man wie schon gesagt, einer "Klasse" Eigenschaften und Methoden hinzu.
Die sind dann in allen daraus erzeugten Objekten verfügbar. Man muss sich das vorstellen, als ob man das so schreibt:
function meineKlasse ()
{
this.nicht_nett = 'L***ck mich!';
this.ziehLeine = function ()
{
alert (this.nicht_nett);
}
}
3. Weitere Möglichkeiten
Wer jetzt denkt, dass man eine schon vorhandene Methode um eine weitere ergänzen kann (siehe dazu auch Verschachtelungen), der ist auf dem Holzweg. Denn bei folgendem Beispiel wird die bereits existierende Methode überschrieben, also neu aufgebaut.
meineKlasse.prototype.ziehLeine = function ()
{
this.checkUser = function (user)
{
if ('Peter Kropff' == user)
{
alert ('Verp***s dich! Armleuchter!');
}
}
}