Aufruf Basisklasse function - Klasse Vererbung in JavaScript
Bitte schauen Sie sich das folgende Beispiel:
MyBaseClass = function(a) {
this.a = a;
};
$.extend(MyBaseClass.prototype, {
init: function() {
console.log('I am initializing the base class');
}
});
MyChildClass = $.extend(MyBaseClass, {
init: function() {
MyBaseClass.prototype.init();
console.log('I am initializing the child class');
}
});
var = new MyChildClass();
var.init();
Diese ausgeben sollte sowohl 'ich bin initialisiert die Basisklasse' und 'ich bin der Initialisierung der Kind-Klasse'.
Ich muss in der Lage sein, zu Erben der Klasse MyBaseClass, aber noch nicht in der Lage, um seine init () - Methode am Anfang des neuen init () - Methode.
Wie mache ich das?
$.extend
nicht tun, was Sie denken.- irgendwie ein krasses Problem mit diesem code ist die Verwendung von
var
an der Unterseite - Was ist
$.extend
überhaupt? - die eine ist definiert durch jQuery. Ich gehe davon aus das eine.
- Ich bin mir sicher, dass Felix wusste, es wurde aber den Hinweis, dass OP sollte Hinzugefügt haben, die relevanten tag.
- Ich bin mir durchaus bewusst, dass der Tat 🙂
- Ja, jeder ist angenommen, jQuery, aber es könnte alles sein, wirklich 😉 Es ist keine Spur von jQuery in den OP-code. Anyways... die Frage ist gelöst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
jQuery erweitern baut keine erbschaft, sondern "Merge den Inhalt von zwei oder mehr Objekte gemeinsam in das erste Objekt".
Verwenden Prototyp-basierte Vererbung um Ihre erbschaft, und rufen explizit die "super" - Methode :
Ausgabe :
Object.create
hier verwendet werden?MyChildClass.prototype = Object.create(MyBaseClass.prototype);
. Das wäre ein besserer Ansatz für die Vererbung IMHO. Das instanziieren einer neuen Instanz des übergeordneten kann haben auch Nachteile.jsFiddle Demo
Paar Dinge.
extend
wirklich fügt nur auf die Eigenschaften, es macht nicht viel. Sie müssen also eine Funktion, die sich für Ihre Klasse bereit, erbt von der Basis-Klasse, und verwenden Sie dann verlängern auf, dass Klassen Prototyp.Hier ist ein weiterer Ansatz, die ich mag zu verwenden, für die Vererbung - wenn die Spezifität der Methoden ist zu einem Thema sein - das ist die Speicherung der Basis-Klasse in der eigenen Immobilie
Anderen Prototypen-Muster, dieses Ziel zu erreichen:
Ausgabe:
Hier
this.super
speichert Referenz auf Basisklasse.instanceof
.a instanceof MyChildClass
this.super.init()
oderthis.super.anyfunc()
. Diesesuper
sieht aus wie eine schlechte Idee.instanceof
keinen Gebrauch von derconstructor
Eigenschaft. Es vergleicht einfach jeden Prototyp in der Prototyp-Kette des linken Operanden (Objekt) gegen dieprototype
Eigenschaft, wenn der Rechte operand (die Konstruktor-Funktion). Dieconstructor
Eigenschaft keine Bedeutung für die internen Abläufe (aber ich denke, es macht Sinn zu haben, die es beziehen, um die korrekte Funktion).super
ist eine schlechte Idee : er Stiehlt sich aus der semantischen Sprachen mit Vererbung, aber es bedeutet nicht das gleiche, da es hier nicht auf die Instanz und können daher nicht verwendet werden in der gleichen Weise. Es fühlt sich zu sehr wie ein Versuch zu machen, JS sieht wie eine Sprache, ist es nicht.super
Verweis auf übergeordnete consrtuctor so würde es Aussehensuper.init()
in unserem Beispiel.