Hauptmenü

Untermenü

OOP mit JavaScript - Aggregation - Zugriffsrechte

1. Der feine Unterschied

Im Gegensatz zum Prototyping gibt es bei der Aggregation nur eine Richtung, nämlich von oben nach unten. Und das liegt daran, dass man hier innerhalb von Konstruktorfunktionen mit eigenen Objekten arbeitet, die aus anderen Konstruktorfunktionen erzeugt worden sind.

Ein Beispiel


function Panzer()
{
  this.mgSchiessen = function()
  {
    alert ('Ratatat mit ' this.mg 'mm-MG');
  }
}
function Kampfpanzer()
{
  var pz          = new Panzer;
  this.mg         7.62;  
  this.rumballern = function()
  {
    pz.mgSchiessen();
  }
}
var kampfpanzer = new Kampfpanzer;
kampfpanzer.rumballern();

Erläuterung

Der Zugriff auf die Methode mgSchiessen des Konstruktors Panzer kann hier nur über die Referenz pz innerhalb(!) von Kampfpanzer erfolgen. Wenn das Objekt kampfpanzer darauf zugreifen möchte, so muss die Referenz öffentlich zugreifbar sein. Also mit this.pz und dann einem kampfpanzer.pz.mgSchiessen.

2. Aber!

Die Methode mgSchiessen funktioniert nicht so, wie sie sollte. Denn als Ergebnis bekommt man ein Ratatat mit undefinedmm-MG. Denn der Konstruktor Panzer weiß gar nichts vom Kampfpanzer. Wie auch? Dasselbe Verhalten gibt es natürlich auch bei den Methoden. Jetzt könnte man auf die Idee kommen und im Panzer ebenfalls eine Referenz à la var kpz = new Kampfpanzer zu erzeugen, um an die Eigenschaft mg zu kommen.

Vergesst es!

Das ist Tinnef, Humbug, Blödsinn hoch drei. Das macht man bei vier oder fünf Konstruktorfunktionen und dann geht alles baden, weil man den Überblick verloren hat. Man dreht sich nur noch im Kreis und irgendwann ist einem schwindelig und man rennt gegen die Wand.

3. Ein Tipp

Wie ihr sehen könnt, sind die Zugriffsrechte beim Prototyping viel einfacher zu handhaben. Allerdings besteht hier immer die Gefahr, dass man aus Versehen etwas überschreibt. Trotzdem ist diese Form der Vererbung grundsätzlich erst mal vorzuziehen.

Mit Aggregationen sollte man dagegen nur in ganz speziellen Fällen arbeiten. Also immer dann, wenn man konsequent von "oben" nach "unten" vererben will.

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