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



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
sorry; hatte den entsprechenden Post erst durch den feed registriert