546 Kapitel 12
Ein per Konstruktor erstelltes Objekt verändern
Auch per Konstruktor erstellte Objekte können
eigene unabhängige Eigenschaften haben
Wir haben schon mehrfach über die Verwendung von Konstruktoren gesprochen, um konsis-
tente Objekte zu erstellen – Objekte mit den gleichen Eigenschaften und Methoden. Wir haben
aber noch nicht erwähnt, dass die Verwendung von Konstruktoren uns trotzdem nicht daran
hindert, das Objekt später in etwas anderes zu verwandeln. Ein mit einem Konstruktor erstelltes
Objekt kann durchaus verändert werden.
Was genau meinen wir damit? Erinnern Sie sich an unsere Einführung in Objektliterale? Wir
haben uns angesehen, wie man Eigenschaften nach Erzeugung des Objekts hinzufügen und ent-
fernen kann. Das funktioniert ebenso gut mit Objekten, die von einem Konstruktor stammen.
var fido = new Dog("Fido", "Mischling", 17);
fido.owner = "Bob";
delete fido.weight;
Eine neue Eigenschaft fügen wir hinzu, indem wir
ihr einfach einen Wert in unserem Objekt zuweisen.
Hier wird unser Hund Fido mit dem
Dog-Konstruktor erschaffen.
Oder wir entfernen eine Eigenschaft, indem
wir den delete-Operator benutzen.
Wenn Sie wollen, können Sie sogar neue Methoden einbauen:
fido.trust = function(person) {
return (person === "Bob");
};
Um eine Methode hinzuzufügen, weisen Sie die Methode
einfach einem neuen Eigenschaftsnamen im Objekt zu.
Achtung, anonyme Funktion!
Sie sind überall!
Wie Sie sehen, verändern wir hier das do-Objekt. Wenn wir do eine Methode
hinzufügen, gilt diese nur für do. Die anderen Hunde bekommen davon nichts mit.
Dieser Code funktioniert, weil trust im fido-
Objekt definiert wurde. notBite ist also true.
var notBite = fido.trust("Bob");
var spot = new Dog("Spot", "Chihuahua", 5);
notBite = spot.trust("Bob");
Dieser Code funktioniert nicht, weil spot keine
trust-Methode besitzt. Stattdessen bekommen
wir die Fehlermeldung: »TypeError: Object
#<Dog> has no method ‘trust’«.
Sie sind hier 547
Fortgeschrittene Objektkonstruktion
Wenn ich ein car-Objekt
nach seiner Erstellung
verändere, ist es dann
immer noch ein Auto?
Ja, ein Auto bleibt ein Auto, auch wenn Sie es später
verändern. Wenn Sie überprüfen, ob ein Auto immer noch eine Instanz
von Car ist, ist die Antwort Ja (bzw. true). Nehmen wir beispielsweise dieses
Car-Objekt:
var cadiParams = {make: "GM", model: "Cadillac",
year: 1955, color: "Bräunlich",
passengers: 5, convertible: false,
mileage: 12892};
var cadi = new Car(cadiParams);
Wir können die neue Eigenschaft chrome hinzufügen und dafür convertible
löschen:
cadi.chrome = true;
delete cadi.convertible;
Und trotzdem ist unser Cadillac (cadi) immer noch ein Auto (Car):
cadi instanceof Car
Aber ist das auch im praktischen Sinne noch ein Auto (car-Objekt)? Was
passiert, wenn wir alle Eigenschaften im Objekt löschen? Wäre es dann immer
noch ein Auto? Der instanceof-Operator würde Ja sagen. Der gesunder
Menschenverstand sagt eher Nein.
Es kommt eigentlich selten vor, dass Sie ein Objekt mit einem Konstruktor
erzeugen und es später in etwas vollkommen anderes verwandeln, das keine
Ähnlichkeit mehr mit dem Ausgangsobjekt hat. Im Allgemeinen verwenden Sie
Konstruktoren, um möglichst konsistente Objekte zu erstellen. Wenn Sie aber
flexiblere Objekte brauchen, kann JavaScript auch das. Es ist Ihre Aufgabe als
Codedesigner, Ihre Konstruktoren und Objekte so zu verwenden, dass es für
Sie einen Sinn ergibt (und vergessen Sie dabei auch Ihre Mitarbeiter nicht).
Evaluiert zu true.
Das meinten wir,
als wir sagten,
JavaScript habe
ein dynamisches
Typensystem.

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.