12NovFunktionale Vererbung

Funktionale Vererbung ist ein Begriff, der durch Douglas Crockford geprägt wurde.

Funktionen sind Objekte. Wie Objekte können Funktionen auch selbst Eigenschaften (Properties) und Methoden (Funktionen) haben.

Funktionale Verberbung implementiert man, indem man eine Funktion erstellt, die Objekte erzeugt und diese zurückgibt. Innerhalb dieser Objekt-erzeugenden Funktion gibt es private Instanzvariablen. Auf diese kann das zurückgegebene Objekt als Closure zugreifen. Für die Nutzer des zurückgegebenen Objekts sind diese jedoch unsichtbar. Das zurückzugebende Objekt wird um Methoden erweitern. Diese Methoden haben ebenfalls Zugriff auf die privaten Variablen.

function square(width) {
  var squareObject = {};
  squareObject.getArea = function() {
    if (width > 0) {
      return width * width;
    }
 }
 return squareObject;
}
var mySquare = square(5);
print(mySquare.getArea()); // 25
print(mySquare.width); // undefined

Vererbung lässt sich in der funktionalen Vererbung durch das Dekorierer-Entwurfsmuster implementieren. Um einen Subtypen zu implementieren erweitert man den Supertypen um die benötigten Eigenschaften oder Methoden. Zu überschreibende Methoden speichert man in privaten Variablen, um diese auch dann noch verwenden zu können, wenn man die Methoden des Super-Objekts bereits überschrieben hat.

function box(width) {
  var boxObject = square(width);
  var getSquareArea = boxObject.getArea;
  boxObject.getVolume = function() {
    if (width > 0) {
      return getSquareArea() * width;
    }
  }
  boxObject.getArea = function() {
    if (width > 0) {
        return getSquareArea() * 6;
    }
  }
  return boxObject;
}
var myBox = box(5);
print(myBox.getVolume());  // 125
print(myBox.getArea()); // 150

Dieser Ansatz ist wohl der einfachste Ansatz zur Objekt-orientierten Programmierung in JavaScript, da er ohne Prototypen und Konstruktor-Objekte auskommt.

Gesucht und gefunden durch:

  • funktionelle vererbung
  • vererbung javascript

  1. 1 wactbprot31 Jan 2011

    In Crockfords Buch (JS the good parts) steht die funktionale Vererbung am Ende des Kapitels über Vererbung; macht also (für mich) den Eindruck der “Krone”.
    “… er ohne Prototypen und Konstruktor-Objekte auskommt.”
    hört sich für mich eher auch wie ein Vorteil an.

    Gibt es aus Eurer sicht Nachteile?
    THX

  2. 2 wactbprot31 Jan 2011

    sorry; hatte den entsprechenden Post erst durch den feed registriert