602 Kapitel 13
Den Code reinigen
Eine letzte Reinigung der Ausstellungshunde
Unser Code kann fast schon an den Hundezüchterverein von Webville ausgeliefert
werden. Wir müssen lediglich an ein paar Kleinigkeiten etwas nachbessern. An zwei
Stellen müssen wir noch ein wenig polieren.
Den ersten Schritt kennen Sie schon: Die constructor-Eigenschaft der ShowDog-In-
stanzen hat nicht den richtigen Wert, auch wenn der Code trotzdem korrekt funktio-
niert. Dennoch gilt das Einstellen des richtigen Konstruktors als beste Vorgehensweise.
Vielleicht muss sich eines Tages ein anderer Programmierer Ihren Code ansehen. Da
kann ein unerwarteter Konstruktor bei der Untersuchung der Ausstellungshunde-
Objekte schnell zu Verwirrung führen.
Um die constructor-Eigenschaft zu reparieren, müssen wir dafür sorgen, dass sie im
Prototyp für Ausstellungshunde korrekt gesetzt ist. Dadurch erbt ein Ausstellungshund
bei seiner Erzeugung die richtige constructor-Eigenschaft. Und das geht so:
function ShowDog(name, breed, weight, handler) {
this.name = name;
this.breed = breed;
this.weight = weight;
this.handler = handler;
}
ShowDog.prototype = new Dog();
ShowDog.prototype.constructor = ShowDog;
Hier nehmen wir den Prototyp für Ausstellungs-
hunde und setzen seine constructor-Eigenschaft
explizit auf den ShowDog-Konstruktor.
Mehr müssen Sie nicht tun. Wenn wir Scotty
erneut überprüfen, sollte die richtige constructor-
Eigenschaft ausgegeben werden, wie übrigens für
alle anderen Ausstellungshunde auch.
Bedenken Sie: Das hier gilt als beste
Vorgehensweise. Ihr Code funktioniert
auch ohne diese Schritte wie erwartet.
Lassen Sie die Tests der vorigen Seite jetzt noch einmal laufen, um
sicherzustellen, dass die Ausstellungshunde-Instanz Scotty den richtigen
Konstruktor hat.
JavaScript-Konsole
Fido ist ein Hund (Dog)
Scotty ist ein Hund (Dog)
Scotty ist ein Ausstellungshund (ShowDog)
Konstruktor für Fido ist function Dog...
Konstruktor für Scotty ist function
ShowDog...
Hier die aktuellen Ausgaben. Wie Sie sehen, ist der
Konstruktor von Scotty jetzt ShowDog.
Für den Hund-Prototyp ist das jedoch nicht
nötig, weil seine constructor-Eigenschaft
standardmäßig korrekt eingerichtet wird.
Übung
Sie sind hier 603
Prototypen verwenden
function ShowDog(name, breed, weight, handler) {
this.name = name;
this.breed = breed;
this.weight = weight;
this.handler = handler;
}
Vielleicht ist es Ihnen aufgefallen:
Dieser Code wird bereits im Dog-
Konstruktor verwendet.
Das kennen Sie ja schon: Immer wenn wir in diesem Buch duplizierten
Code sehen, läuten die Alarmglocken. In diesem Fall weiß der Dog-Kon-
struktor bereits, wie die Aufgabe zu erledigen ist. Warum sollten wir das
nicht benutzen? Bedenken Sie, dass unser Beispiel recht einfach gehalten
ist. Oftmals enthalten Konstruktoren komplexen Code zur Berechnung
der Startwerte von Eigenschaften. Außerdem wollen wir nicht jedes Mal
den Code wiederholen, nur um einen neuen Konstruktor zu erstellen.
Das reparieren wir jetzt. Hierfür schreiben wir zuerst den Code neu und
zeigen Ihnen dann im Detail, was wir gemacht haben:
Dog.call(this, name, breed, weight);
Wie Sie sehen, haben wir den redundanten Code im ShowDog-Konstruktor durch
einen Aufruf der Methode Dog.call ausgetauscht. Das funktioniert so: call
ist eine JavaScript-eigene Methode, die Sie für jede Funktion (schließlich ist Dog
auch eine Funktion) verwenden können. Dog.call ruft die Dog-Funktion auf und
übergibt ihr das Objekt, das als this verwendet werden soll, sowie die übrigen
Argumente für die Dog-Funktion. Aber eins nach dem anderen:
Dog ist die Funktion,
die hier aufgerufen
werden soll.
Was auch immer im Körper
der Dog-Funktion für
this benutzt wird.
Die übrigen
Argumente werden
wie gewohnt an
Dog übergeben.
Etwas mehr Sauberkeit
Im ShowDog-Konstruktorcode können wir ebenfalls etwas Ordnung schaffen.
Sehen wir uns das noch einmal an:
function ShowDog(name, breed, weight, handler) {
Dog.call(this, name, breed, weight);
this.handler = handler;
}
Dieses Codestück benutzt den Dog-
Konstruktor, um die Eigenschaften für
Name (name), Rasse (breed) und Gewicht
(weight) zu verarbeiten.
Der Dog-Konstruktor kennt keinen
Hundeführer (handler). Daher müssen wir
ihn hier »von Hand« einrichten.
Mit diesem Code rufen wir
die Dog-Konstruktorfunk-
tion auf. Allerdings weisen
wir sie an, die ShowDog-In-
stanz als this zu benutzen.
Dadurch richtet die Dog-
Funktion die Eigenschaften
name, breed und weight in
unserem ShowDog-Objekt
korrekt ein.
Für das Konzept, duplizierten Code
zu vermeiden gibt es das Akronym
DRY: »Don't repeat yourself«, also
keine Wiederholungen, wie man unter
Programmierern so sagt.
call ist die von uns aufgerufene Dog-Methode. Die call-
Methode sorgt für den Aufruf der Dog-Funktion. Anstatt
das direkt zu tun, verwenden wir die call-Methode und können
so bestimmen, welches Objekt für this verwendet wird.

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.