Hauptmenü

Untermenü

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