Okay, mein erster Versuch, zu erklären, was ich getan habe, ist kläglich gescheitert. Ich kopiere grundsätzlich Crockfords Object.create (), außer mit privaten Variablen.
Wenn Sie sich die akzeptierte Antwort hier ansehen Wie erben Sie von einem class in javascript? , werden Sie Object.create als das letzte Muster sehen, was meiner Meinung nach besser der prototypischen Natur von Javascript (Objekten, Objekten) entspricht, statt die klassische Vererbung zu emulieren (Klassen, Objekte).
Wenn Sie sich den Wikipedia-Artikel über prototypbasierte Programmierung ansehen ( Ссылка ), können Sie mehr von dem sehen, was ich gemein.
Der Nachteil von Object.create () ist jedoch, dass es keine Unterstützung für private Mitglieder gibt. Das schlage ich vor:
%Vor%Dann erstellen Sie Objekte wie folgt:
%Vor%Wie ich die "from" -Funktion gemacht habe, ist es so, dass wenn ein Elternobjekt seine Methoden ändert, wenn Sie die Änderung in einer Kindinstanz verhindern wollen, Sie Folgendes angeben können:
%Vor%in der untergeordneten Instanz.
Beachten Sie auch, dass Objekte, die ex nihilo erstellt wurden, nicht von Object (hasOwnProperty, etc ..) erben. Sie müssen dies explizit als .from (Objekt) angeben.
Vorteile dieses Musters:
Es gibt einen Hauptnachteil dieser Methode, an den ich denken kann: Die 'function ()' -Syntax kann Leute dazu verleiten, zu denken, dass der Variablen anstelle eines Objekts eine Funktion zugewiesen ist.
Meine Frage ist, gibt es andere Nachteile, die ich vermisse? (Schließen Sie keine Nachteile des prototypischen Musters ein - das ist subjektiv - aber nur von meiner Implementierung).
Erstens, wie bereits erwähnt, ist der Function.prototype
Ansatz wirklich ein Schmerz. Warum nicht das Gleiche wie folgt implementieren:
Dann verwenden Sie
%Vor% mit den gleichen Ergebnissen wie oben.
Bonus: Sie können das Argument constructor
weglassen, wie folgt:
Zweitens, ich weiß nicht, ob es für echte prototypische Vererbung eine Verwendung gibt, wie Sie es nennen. Im wirklichen Leben bin ich ziemlich sicher, dass die Konstruktorfunktion speziell auf das Objekt zugeschnitten ist, das gerade erweitert wird ( a
). Also wirst du am Ende anrufen
mit der gleichen f
- a
Kombination immer und immer wieder. Und ja, Sie sparen einige Bytes an Speicher im Vergleich zu einem klassenorientierten Ansatz, aber ehrlich gesagt, wen interessiert das schon?
Dennoch ist das Ganze in der Theorie eine wirklich gute Idee.
Tags und Links javascript inheritance prototype