OOP mit JavaScript - Überschreiben
1. And now for something completely different
Soll heißen, jetzt kommt etwas, das wirklich muy importante ist. Also sauwichtig! Drum spitzt die Ohren, vergesst die Closures und konzentriert euch. Also, in PHP gibt es die Möglichkeit, Eigenschaften und Methoden von Elternklassen zu überschreiben. Und das funktioniert auch so ähnlich in JavaScript. Nur mit einem Unterschied. Es ist viel viel leichter.
2. Der Sinn dahinter
Da ich schon einige Mails zu diesem Thema bekommen habe, wo man mich fragte, was das überhaupt soll, werde ich das jetzt versuchen zu erklären. Also, ein paar Beispiele für das Überschreiben habe ich euch ja schon gezeigt. Und das Konzept ist nun so schwer zu verstehen nicht. Mein Gott, ich rede wie Yoda. Egal, kommen wir nun zu den Details.
Wir haben in den letzten Abschnitten ein paar Panzer gebaut. Und über die Vererbung uns dann die einzelnen Arten zusammengebaut. Jetzt
erinnern wir uns an unseren Viagrapanzer, also den mit der großen Wumme. Dort haben wir die Eigenschaft kanone
überschrieben.
Das hätte man auch anders machen können
Jau, aber wie? Dazu müsste man jedem individuellen Kampfpanzer
-Objekt das entsprechende Kaliber verpassen und das nur, weil es
irgendeinen dummen Spezialpanzer
gibt. In der Realität sähe das dann so aus, dass Y-Tours 500 Kampfpanzer
und
nur 10 Spezialpanzer
bestellt. Da wäre es doch ziemlich sinnlos, für jeden einzelnen Kampfpanzer
eine eigene(!)
Kanone zu entwickeln. Denn programmiertechnisch wäre dem so.
3. Ausnahmen
Man überschreibt also Eigenschaften und Methoden in besonderen Fällen, um sich Arbeit zu sparen. Das ist so ähnlich wie bei CSS, wo man das auch ganz gerne macht. Da definiert man sehr häufig bei den Eigenschaften allgemeine Werte und passt sie dann Stück für Stück an.
4. Das Prinzip
Dazu greifen wir mal auf ein ganz einfaches Beispiel zu, wo wir in einem Objekt die Methode und die Eigenschaft ändern.
var obj = new Object();
obj.eigenschaft = 'blubb';
obj.methode = function ()
{
alert (this.eigenschaft);
};
obj.methode();
// hier wird "eigenschaft" überschrieben
obj.eigenschaft = 'blubber';
obj.methode();
// hier wird "methode" überschrieben
obj.methode = function ()
{
alert ('Kein Bock mehr');
};
obj.methode();
Ein Hinweis
Bei diesem Beispiel wird mir persönlich angst und bange. Denn normalerweise arbeite ich damit nur, wenn ich Objekte einmalig(!) hart verdrahte. Und natürlich nehme ich dafür Objektliterale. Das hier ist zwar dasselbe in Grün, aber übersichtlicher.
Wichtig
An diesem Beispiel könnt ihr schon erahnen, dass man nur öffentliche Eigenschaften und Methoden überschreiben kann aber keine privaten. Das sieht zwar manchmal so aus, stimmt aber nicht. Außerdem müsst ihr dabei noch auf ein paar Feinheiten achten, aber das kommt jetzt.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt