Vererbung mit MooTools – Klassen erweitern

By mirko on February 6, 2011

{facebook-share}

Ein wesentlicher Bestandteil der Objektorientierung ist die Vererbung. Hierbei erbt eine Kindklasse (abgeleitete Klasse) von einer Basisklasse. Die Kindklasse verhält sich völlig identisch zur Basisklasse und kann nun mit eigenen Funktionen erweitert werden. Natürlich können auch Funktionen oder Eigenschaften die von der Basisklasse geerbt wurden, verändert oder ersetzt werden. MooTools bietet zwei sehr einfache Möglichkeit der Klassenvererbung, welche nachfolgend vorgestellt werden.

Klassenvererbung mit extends
- Eine Klasse erbt alle Eigenschaften und Funktionen einer anderen Klasse -

Wir verwenden als Beispiel nochmals die Klasse Window aus dem 1 Teil und erweitern diese um die Funktion getStatus().

var Window = new Class
({
  initialize: function(status)
    {
      this.windowStatus = status;
    },
  getStatus: function()
    {
      alert(this.windowStatus)
    }
});

Jetzt nutzen wir die Möglichkeit von MooTools. MooTools stellt die Extends-Eigenschaft zur Verfügung. Über diese definieren wir die Klasse, von der unsere neue Klasse erben soll:

var BetterWindow = new Class
({
  Extends: Window,
  setStatus: function(status)
    {
      this.windowStatus = status;
    }
});

Die Klasse BetterWindow erbt von der Klasse Window sämtliche Funktionen. Gleichzeitig erhält Sie eine neue Funktion setStatus(). Das heißt der Klasse BetterWindow stehen die Funktionen getStatus() und setStatus() zur Verfügung.

Das kann man nachfolgend testen:

var MyWindow = new BetterWindow('open');
MyWindow.getStatus();  // Alert: open
MyWindow.setStatus('close');
MyWindow.getStatus(); // Alert: close

Wird nun nachträglich die Klasse Window geändert, stehen diese Änderungen der Klasse BetterWindow automatisch zur Verfügung.

Häufig tritt der Fall auf, das man in der neuen Klasse einen eigenen Konstruktor benötigt. Damit man weiterhin die Funktionalität des Konstruktors der Mutterklasse nutzen kann, kann man diese per this.parent() aufrufen:

var BetterWindow = new Class
({
  Extends: Window,
  initialize: function(name, status)
    {
      // Aufruf der initialize Funktion der Window Klasse
      this.parent(status);
      this.name = name;
    },
setStatus: function(status)
  {
    this.windowStatus = status;
  }
});

Vererbung mit implements
- die Klasse erhält alle Funktionen aus den implementierten) Klassen -

MooTools bietet mit der Implements-Eigenschaft eine weitere Variante, Klassen zu erweitern. Hierbei erhält man die Möglichkeit, innerhalb einer Klasse Funktionen und Eigenschaften einer anderen Klasse zu nutzen. Dabei besteht jedoch keine Beziehung zwischen den Klassen wie bei der Nutzung von Extends.
Die Möglichkeiten von Implements liegen z.B. auch in der einfachen Erweiterbarkeit der eigenen Klasse mit Funktionen von vorhandenen MooTools-Klassen.

Leave a Reply

You must be logged in to post a comment.