Funktionale Vererbung in JavaScript

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-Funktionen auskommt.

Dies ist ein Cross-Post von Ajaxer.de.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Your post must include a link to this post.

How does this work?
Write a response on your own website and include a link to this post. Then submit your response’s URL here. Your response may appear here after moderation. To update or remove it, edit or delete your original post and submit the same URL again. Learn more about Webmentions.