V. 8.7 (27.03.2012)

Infos

Download

Theorie OOP mit JavaScript

Schnellsuche

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.

weiter zum nächsten Abschnitt