Sie sind hier 543
Fortgeschrittene Objektkonstruktion
Objektinstanzen verstehen
Es lässt sich nicht direkt ermitteln, ob ein JavaScript-Objekt einen bestimmten Typ (Hund,
Auto usw.) hat. In JavaScript sind Objekte dynamische Strukturen, und der Typ aller Objekte ist
einfach »object«, egal welche Eigenschaften und Methoden sie besitzen. Aber wir können ein paar
Informationen über das Objekt herausbekommen, wenn wir den Konstruktor des Objekts kennen.
Vergessen Sie nicht, dass jedes Mal, wenn Sie einen Konstruktor über den new-Operator aufrufen,
eine neue Instanz eines Objekts erzeugt wird. Und wenn Sie hierfür den Car-Konstruktor benutzt
haben, können wir vereinfacht sagen, das Objekt sei ein Auto. Formeller würden wir sagen, das
Objekt sei eine Instanz von Car.
Instanz 1
Instanz 2
Instanz 3
Die Behauptung, ein Objekt sei eine Instanz eines bestimmten Konstruktors, ist nicht nur
so dahingesagt. Tatsächlich können wir mit dem instanceof-Operator Code schreiben,
der den Konstruktor eines Objekts überprüft. Hierzu etwas Code:
Sie können sich diese Autos als
Objekte vom gleichen Typ vorstel-
len, weil sie alle mit dem gleichen
Konstruktor erstellt wurden.
Wie Sie wissen, kann jede Instanz ihre eigenen Eigenschafts-
werte haben. Dennoch stellen wir uns alle vom Car-Konstruktor
erstellten Objekte als Instanzen von Car vor.
var cadiParams = {make: "GM", model: "Cadillac", year: 1955, color: "Bräunlich",
passengers: 5, convertible: false, mileage: 12892};
var cadi = new Car(cadiParams);
if (cadi instanceof Car) {
console.log("Herzlichen Glückwunsch!
Es ist ein Auto.");
};
Tatsächlich sind die Dinge etwas komplizierter, als hier
beschrieben. Zu den Details kommen wir im nächsten Kapitel.
Wie sich zeigt, speichert der new-Operator beim Anlegen eines Objekts unter anderem
Informationen, mit denen wir jederzeit herausfinden können, ob ein bestimmter
Konstruktor das Objekt erstellt hat. Diese Informationen verwendet instanceof, um zu
ermitteln, ob ein Objekt eine Instanz eines bestimmten Konstruktors ist.
Wurde das Objekt mit dem angegebenen Konstruktor
erstellt, gibt der instanceof-Operator true zurück.
In diesem Fall fragen wir: »Ist das cadi-Objekt eine
Instanz, die vom Car-Konstruktor erstellt wurde?«
JavaScript-Konsole
Herzlichen Glückwunsch!
Es ist ein Auto.
544 Kapitel 12
Übung zu instanceof
Wir brauchen eine Funktion namens dogCatcher (Hundefänger), die true zurückgibt, wenn das
übergebene Objekt ein Hund ist, und ansonsten false. Schreiben Sie eine Funktion, die Sie mit
dem unten stehenden Code testen. Vergessen Sie nicht, Ihre Antwort am Ende des Kapitels zu
überprüfen, bevor Sie weiterlesen!
function dogCatcher(obj) {
}
Schreiben Sie hier Ihren Code
hin, um die dogCatcher-
Funktion zu implementieren.
Und hier ist Ihr Testcode:
function Cat(name, breed, weight) {
this.name = name;
this.breed = breed;
this.weight = weight;
}
var meow = new Cat("Stevens", "Siam", 5);
var whiskers = new Cat("Anton", "Mischling", 6);
var fido = {name: "Fido", breed: "Mischling", weight: 17};
function Dog(name, breed, weight) {
this.name = name;
this.breed = breed;
this.weight = weight;
this.bark = function() {
if (this.weight > 12.5) {
alert(this.name + " macht Wuff!");
} else {
alert(this.name + " macht Yip!");
}
};
}
var fluffy = new Dog("Fluffy", "Pudel", 15);
var spot = new Dog("Spot", "Chihuahua", 5);
var dogs = [meow, whiskers, fido, fluffy, spot];
for (var i = 0; i < dogs.length; i++) {
if (dogCatcher(dogs[i])) {
console.log(dogs[i].name + " ist ein Hund!");
}
}
Übung
Sie sind hier 545
Fortgeschrittene Objektkonstruktion
Ein Objekt ist also ein Hund,
wenn es mit dem Dog-Konstruktor
erzeugt wurde, und sonst nicht,
oder?
Ja, so funktioniert's. JavaScript ist bei Objekttypen
nicht so streng. Wenn Sie daher zwei Objekte vergleichen,
um zu sehen, ob beides Katzen oder beides Hunde sind,
müssen Sie überprüfen, ob beide Instanzen mit dem
gleichen Konstruktor erzeugt wurden. Wie gesagt: Eine
Katze ist eine Katze, wenn sie mit dem Cat-Konstruktor
erstellt wurde, und ein Hund ist ein Hund, wenn er mit
dem Dog-Konstruktor erzeugt wurde.
Im folgenden Kapitel werden Sie Konstruktoren und
Objekte sehen, die noch flexibler sind als die bereits
bekannten. Wir könnten beispielsweise ein Objekt
erstellen, das mit dem Taxi-Konstruktor erzeugt wurde.
Gleichzeitig wissen wir, dass es ein Auto ist. Im Moment
reicht es, wenn Sie den Gedanken irgendwo im Hirn
ablegen. Wir kommen später darauf zurück.

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.