Was ist die Differentialvererbung in JavaScript?

8

Diese Antwort auf die Methode Object.create() in JavaScript in SO spricht über differentielle Vererbung . Es fährt fort zu sagen:

  

Mit dieser Methode können Sie die differentielle Vererbung einfach implementieren,   wo Objekte direkt von anderen Objekten erben können.

Soweit ich weiß, erlaubte JavaScript immer, dass Objekte durch prototypische Vererbung direkt von anderen Objekten erben. Es gibt kein Konzept einer Klasse in JavaScript. Also was bedeutet differentielle Vererbung wirklich und warum heißt es so?

PS: Ich hatte vor einiger Zeit einen Kommentar zu dieser Antwort hinterlassen, aber ich habe keine Antworten erhalten. Also wollte ich mit der größeren und großartigen Community von SO JavaScript-Benutzern nachsehen.

    
Geek 21.07.2013, 11:14
quelle

1 Antwort

8

Wie die anderen Kommentatoren und die Artikel, die sie verlinkt haben, bereits vorgeschlagen haben, ist differentielle Vererbung "nur" die normale, bekannte prototypische Vererbung.

Aber mit dem Begriff differentielle Vererbung fokussieren Sie sich auf ein reineres Muster als es in JavaScript bekannt ist (obwohl es in anderen prototypischen Sprachen wie Self, NewtonScript oder Io durchaus üblich ist). Im Gegensatz zum pseudoklassischen Muster gibt es keine Konstruktoren mit new Verwendung. Stattdessen erstellen Sie mit Object.create ein neues Objekt, das in einem Schritt vom Zielobjekt erbt, und erstellen dann die erforderlichen Instanzeigenschaften (nur diejenigen, die anders sind) manuell (nicht mit einem Konstruktor). . Es ist nicht ungewöhnlich, von einem Objekt zu übernehmen, das Sie andernfalls als -Instanz betrachten würden, anstatt von einem dedizierten Prototypobjekt.

%Vor%

Wie Sie sehen, ist das Erstellen einer Jane einfach, aber wir müssten mit dem new Constructor() -Muster brechen, wenn wir es benutzt hätten. Deshalb empfehlen einige JS-Gurus, das reine Muster überall zu verwenden (damit Sie besser verstehen, was vor sich geht) und glücklich sind, dass Sie Object.create mit EcmaScript 5 erhalten haben.

Dennoch ist es üblich und hilfreich, das Konstruktormuster zu verwenden und konventionelle Klassenhierarchien zu erstellen, was in prototypischen Sprachen möglich ist. Io zum Beispiel wird eine init -Methode (falls vorhanden) jedes Mal aufrufen, wenn Sie clone ein Objekt haben, und im obigen Beispiel hätten wir auch eine verwenden können, die die Initialisierung von Joe vereinfacht hätte:

%Vor%

Es gibt definitiv keine gerade Linie, um zwischen differentiell und prototypischer Vererbung zu unterscheiden.

    
Bergi 22.07.2013 22:01
quelle

Tags und Links