Die Konstruktoren in JavaScript unterscheiden sich auch von anderen Sprachen. Jede Funktion, die über das Keyword neu aufgerufen wird, kann als Konstruktor angesehen werden.
Innerhalb des Konstruktorkörpers weist dies auf das neu erstellte Objekt hin. Wenn in der Konstruktor -Karosserie keinen Rückgängerausdruck angezeigt wird, werden wir dies standardmäßig zurückgeben, dh das neu erstellte Objekt.
Die Codekopie lautet wie folgt:
Funktion foo () {
this.bla = 1;
}
Foo.prototype.test = function () {
console.log (this.bla);
};
var test = new foo ();
Der obige Code ruft Foo als Konstruktor auf und zeigt den Prototyp des neu erstellten Objekts (__Proto__) auf foo.prototype.
Wenn wir den zurückgegebenen Ausdruck im Konstruktor definieren, gibt der Konstruktor den gesamten Ausdruck zurück, aber dieser Rückgängerausdruck muss ein Objekt sein.
Die Codekopie lautet wie folgt:
Funktions bar () {
Rückkehr 2;
}
New Bar (); // ein neues Objekt
Funktionstest () {
this.Value = 2;
zurückkehren {
Foo: 1
};
}
neuer Test (); // das zurückgegebene Objekt
Wenn neu weggelassen wird, kann die Funktion kein neues Objekt zurückgeben.
Die Codekopie lautet wie folgt:
Funktion foo () {
this.bla = 1; // wird auf das globale Objekt eingestellt
}
Foo (); // undefiniert
Das obige Beispiel kann auch in einigen Szenarien funktionieren, aber aufgrund des Arbeitsmechanismus in JavaScript wird dies auf das globale Objekt hier hinweisen.
Fabrikmodell
Um das neue Keyword neu zu verwenden, muss der Konstruktor einen Rückgabewert anzeigen.
Die Codekopie lautet wie folgt:
Funktions bar () {
var value = 1;
zurückkehren {
Methode: function () {
Rückgabewert;
}
}
}
Bar.prototype = {
foo: function () {}
};
New Bar ();
Bar();
Im obigen Beispiel ist der Effekt des Aufrufens der Funktionsleiste ohne Neue gleich, und ein neu erstelltes Objekt, das die Methodenmethode enthält, wird zurückgegeben, was tatsächlich ein Verschluss ist.
Eine Sache, die hier zu beachten ist, ist, dass New bar () nicht zurückgegeben wird.
Im obigen Beispiel gibt es keinen Unterschied in der Funktionalität zwischen der Verwendung neu oder nicht.
Erstellen Sie neue Objekte über den Werksmodus
Wir werden oft daran erinnert, nicht neu zu verwenden, denn sobald Sie seine Verwendung vergessen, wird dies zu Fehlern führen.
Um ein Objekt zu erstellen, bevorzugen wir das Fabrikmuster und konstruieren ein neues Objekt im Werksmuster.
Die Codekopie lautet wie folgt:
Funktion foo () {
var obj = {};
obj.value = 'blub';
var private = 2;
obj.somemethod = function (value) {
this.Value = Wert;
}
obj.getPrivate = function () {
privat zurückkehren;
}
Rückkehr obj;
}
Obwohl der obige Beispielcode weniger anfällig für Fehler ist als bei der Verwendung von neu und bei der Verwendung privater Variablen bequemer, gibt es einige Nachteile:
Da Prototypobjekte nicht gemeinsam genutzt werden können, ist mehr Speicher erforderlich.
Um die Vererbung zu erreichen, erfordert das Fabrikmuster alle Methoden eines anderen Objekts oder als Prototyp eines neuen Objekts.
Das Aufgeben der Prototyp -Kette bedeutet nur, Neue zu vermeiden, was dem Geist der JavaScript -Sprache zu widersprechen scheint.
Zusammenfassen
Obwohl die Verwendung neuer anfälliger für Fehler ist, ist dies kein Grund, die Verwendung von Prototypungsketten aufzugeben. Was die Methode am Ende annehmen soll, hängt sie von den Anforderungen der Anwendung ab. Der beste Weg ist, einen Stil zu wählen und sich daran zu halten.
Einfach ausgedrückt wird der Konstruktor ein Instanzobjekt initialisieren, und die Prototyp -Eigenschaft des Objekts erbt ein Instanzobjekt.