Hauptmenü

Untermenü

OOP mit JavaScript - Aggregation - Referenz

1. Die Sache mit den Variablen

Wenn man nun die öffentlichen(!) Eigenschaften von Panzer und Kampfpanzer innerhalb von Spezialpanzer nutzen möchte, so kann man neben dem Prototyping auch mit einer Instanz-/Referenzvariablen arbeiten.


function SpezialPanzer()
{
  var panzer      = new Panzer;
  var kampfpanzer = new Kampfpanzer;
}

Wichtig!

Mit einem var panzer = new Panzer; erzeugt man ein neues Objekt(!) innerhalb der Konstruktorfunktion. Alle Änderungen, die man hier später am var panzer vornimmt, beziehen sich nur auf das Objekt und nicht auf das Original.

2. Zugriffsrechte

Über diese Referenz hat nun die Konstruktorfunktion die oben erwähnten Zugriffsmöglichkeiten.


function SpezialPanzer()
{
  var panzer      = new Panzer;
  var kampfpanzer = new Kampfpanzer;
  alert(panzer.ps);
  kampfpanzer.schiessen();
}
var supipanzer = new SpezialPanzer;

3. Aber

Das gilt aber nicht für das daraus erzeugte Objekt supipanzer, da wir die Instanz in einer privaten Eigenschaft gespeichert haben. Um das nun zu erreichen muss man so vorgehen.


function SpezialPanzer()
{
  this.panzer      = new Panzer;
  this.kampfpanzer = new Kampfpanzer;
}

Dann kann auch das Objekt auf die öffentlichen Eigenschaften und Methoden von Panzer und Kampfpanzer zugreifen.


var supipanzer = new SpezialPanzer;
alert (supipanzer.kampfpanzer.kanone);
supipanzer.panzer.fahren();

Wichtig

Nun muss natürlich auch der Zugriff innerhalb der Konstruktorfunktion angepasst werden, da es sonst knallt.


function SpezialPanzer()
{
  this.panzer      = new Panzer;
  this.kampfpanzer = new Kampfpanzer;
  alert(this.panzer.ps);
  this.kampfpanzer.schiessen();
}
var supipanzer = new SpezialPanzer;

4. Ein Hinweis

Der direkte Aufruf von Eigenschaften und Methoden innerhalb der Konstruktorfunktion ist eigentlich nicht die feine englische Art. Ich habe es hier nur aus Anschauungsgründen gemacht und weil ich von Natur aus tippfaul bin. Also bitte übernehmt diesen Stil nicht.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt