14.6 Alternative
Die Entwicklergemeinde ist gespalten, was die beste Vorgehensweise bei der Vererbung angeht. Die hier vorgestellte Variante entspricht der von der ECMA und Macromedia empfohlenen Strategie. Mit Hilfe der __proto__-Eigenschaft ist jedoch eine weitere Herangehensweise möglich.
Das größte Manko der empfohlenen Vorgehensweise ist, dass für die Vererbung eine Instanz der Oberklasse als Prototyp der Unterklasse verwendet wird, nur um im Wesentlichen einen Zeiger (__proto__) zum Prototypen der Oberklasse zu erhalten. Dadurch gehen sämtliche vorher getätigten Veränderungen im Prototypen der Unterklasse verloren. Außerdem erhält der Prototyp unnötigerweise die in der Konstruktorfunktion der Oberklasse erzeugten Eigenschaften. Die Alternative bedient sich hier eines einfachen Tricks und setzt die __proto__-Eigenschaft des Prototyp-Objektes direkt auf den Prototypen der Oberklasse. Das bedeutet, dass der wesentliche Schritt der ursprünglichen Vorgehensweise durchgeführt wird ohne die unnötige Erzeugung einer Instanz der Oberklasse:
Unterklasse.prototype.__proto__ = Oberklasse.prototype;
Diese Schreibweise verhindert aber die Verwendung des super-Operators, da dieser keinen Bezug mehr zu der Oberklasse besitzt. Aber auch dieses Manko lässt sich lösen, indem Sie die undokumentierte __constructor__-Eigenschaft korrekt setzen:
Unterklasse.prototype.__constructor__ = Oberklasse;
Durch diese beiden Zeilen erhalten Sie einen sauberen Bezug zur Oberklasse, der Ihnen auch den Einsatz des super-Operators erlaubt – wenn Sie bereit sind, das Risiko mit den nicht empfohlenen bzw. undokumentierten Eigenschaften __proto__ und __constructor__ einzugehen.
|