2017-01-29 3 views
0

Ich habe this Frage gesehen und ich weiß, wie man eine Klasse erweitert. Ist es jedoch eine gute Methode, dies mit einer Methode zu tun? Ist es sicher, dieses zu verwenden:Ist es eine gute Übung, eine Klasse mit einer Methode zu erweitern?

function extendClass(child, parent) { 
    child.prototype = Object.create(parent.prototype); 
    child.constructor = child; 
} 

extendClass(Banana, Fruit); 

statt dessen:

Banana.prototype = Object.create(Fruit.prototype); 
Banana.prototype.constructor = Banana; 
+0

Ich denke, sie sind gleich. Der erste ist flexibler für den Fall, dass Sie viele Klassen erweitern müssen (also schreiben Sie nicht diese zwei Codezeilen für jede Klasse) –

Antwort

3

Funktionen wiederholt, um Arbeit zu verrichten, anstatt zu wiederholen, die Arbeit überall Sie tun müssen, um es gängige Praxis ist. Dies führt zu verringerten Fehlermöglichkeiten und zentralisiert die Operation, falls sie im Laufe der Zeit verbessert werden muss. Es ist nichts besonderes, Konstruktorfunktionen und zugehörige Prototypen ("Klassen") in eine Vererbungsbeziehung einzubinden, die sie zu einer Ausnahme macht.


Tangential-Neben Hinweis: Ab ES2015 (aka „ES6“, die Spezifikation in Juni 2015 veröffentlicht) diese Art und Weise der Einstellung dieser Hierarchien veraltet ist (obwohl es natürlich immer noch funktioniert). Der ES2015 + Weg ist class und extends.

+0

Ist es auch in Ordnung, 'extendClass (Banana, Fruit)' _before_ zu deklarieren die eigentliche 'Banana' Funktion? Die Erklärung sollte oben angebracht werden und die Dinge würden gut funktionieren, oder? –

+2

@HristiyanDodov: Vorausgesetzt, es ist eine Funktionserklärung und kein Funktionsausdruck, würde es funktionieren, ja, weil (wie Sie sagen) von hissen. Ob Sie das stilvoll machen wollen, liegt natürlich bei Ihnen. –

+0

CF. * "Diese Art der Einrichtung dieser Hierarchien ist veraltet" *. Das einzige, was * als * veraltet wahrgenommen wird, ist die * Syntax *, um diese Hierarchien einzurichten. Der "Weg" der ES2015 macht genau das Gleiche, während er die wahre Natur der Klasse, einen Prototyp, versteckt und einige zusätzliche Fallstricke hinzufügt (z. B. keine echten privaten Methoden oder Eigenschaften). – Tyblitz

Verwandte Themen