3.3 Objekt in Objekt
Die Eigenschaft eines Objekts einer Klasse kann wiederum ein Objekt einer anderen Klasse sein. Zum besseren Verständnis dieses Zusammenhangs wird die Klasse Fahrzeug um die Eigenschaft antrieb der Klasse Motor erweitert.
Das Beispielprogramm:
<!DOCTYPE html><html><head><meta charset="utf-8">
<title>Objekt in Objekt</title>
<script>
class Motor
{
constructor(l, z, k)
{
this.leistung = l;
this.zylinder = z;
this.kraftstoff = k;
}
tunen(x)
{
this.leistung += x;
}
toString()
{
return "Leistung: " + this.leistung + ", Zylinder: "
+ this.zylinder + ", Kraftstoff: " + this.kraftstoff;
}
}
class Fahrzeug
{
constructor(f, g, a)
{
this.farbe = f;
this.geschwindigkeit = g;
this.antrieb = a;
}
toString()
{
return "Farbe: " + this.farbe + ", Geschwindigkeit: "
+ this.geschwindigkeit + ", Antrieb: " + this.antrieb;
}
}
</script>
</head>
<body><p>
<script>
var dacia = new Fahrzeug("Rot", 50, new Motor(60, 4, "Diesel"));
dacia.antrieb.tunen(10);
document.write(dacia + "<br>");
dacia.antrieb.leistung = 80;
dacia.antrieb.zylinder = 6;
dacia.antrieb.kraftstoff = "Benzin";
document.write(dacia);
</script></p>
</body></html>
Listing 3.3 Datei »obj_in_objekt.htm«
Ein Objekt der Klasse Motor hat die Eigenschaften leistung, zylinder und kraftstoff. Außerdem gibt es die Methode tunen() zur Veränderung der Leistung und die Methode toString() zur Ausgabe der drei Eigenschaftswerte.
In der Klasse Fahrzeug ist die Eigenschaft antrieb hinzugekommen. Mithilfe der Methode toString() wird auch der Wert dieser Eigenschaft ausgegeben. Es ist noch nicht zu erkennen, welchen Typ diese Eigenschaft hat.
Im eigentlichen Programm wird ein Objekt der Klasse Fahrzeug mithilfe von new erzeugt. Der dritte Parameter ist ein Objekt der Klasse Motor, das ebenfalls mit new erzeugt wird.
Mit dem ersten Punkt nach dem Namen des Objekts dacia wird die Eigenschaft antrieb des Fahrzeug-Objekts angesprochen, der zweite Punkt führt zur Untereigenschaft des Motor-Objekts.
Zur Ausgabe eines Fahrzeug-Objekts wird die Methode toString() der Klasse Fahrzeug aufgerufen. Diese ruft intern, mithilfe von this.antrieb, die gleichnamige Methode der Klasse Motor auf. Auf diese Weise wird die gesamte Zeichenkette zusammengesetzt, siehe Abbildung 3.3.
Abbildung 3.3 »Motor«-Objekt in »Fahrzeug«-Objekt