Heim > Artikel > Web-Frontend > JavaScript: Ähnlichkeiten und Unterschiede zwischen einer neuen Funktion und dem direkten Aufruf der Funktion
Vielleicht sind viele Leute damit nicht einverstanden, das neue Schlüsselwort vor einer Funktion hinzuzufügen, bedeutet doch, ein Objekt zu instanziieren, oder? Aber so einfach ist es offensichtlich nicht:
function Test() {
This.name = 'Test';
return function() { return true }
}
var test = new Test(); // Was ist der Test hier?
Ist es ein Testobjekt? falsch! Hier ist test eine Funktion - function() { return true }, die in Test zurückgegeben wird. Zu diesem Zeitpunkt ist new Test() äquivalent zu Test(), nicht gleich. Wenn Sie new Test() == Test() verwenden, um festzustellen, ob die beiden gleich sind, wird false zurückgegeben , weil Javascript für den Objektvergleich mit der Funktion auf Referenz basiert.
Um den Unterschied zwischen den beiden in der obigen Situation klarer zu unterscheiden, schauen Sie sich bitte weiterhin den folgenden Code an:
function Test() {
this.name = ' Test';
return 'Test'; Haha, verwirrt dich das erste Beispiel? Tatsächlich ist newT zu diesem Zeitpunkt ein Testobjekt – es verfügt über eine Eigenschaft namens name, deren Wert die Zeichenfolge Test ist.
Aus den beiden oben genannten Codeteilen können wir eine Vermutung anstellen. Wenn der Rückgabewert der Funktion ein herkömmlicher Werttyp ist (Zahl, Zeichenfolge, Boolescher Wert), gibt die neue Funktion ein Instanzobjekt der Funktion zurück. und wenn die Funktion einen Referenztyp (Objekt, Array, Funktion) zurückgibt, entspricht die neue Funktion dem Ergebnis des direkten Aufrufs der Funktion. Dies kann durch Testen bestätigt werden, indem in der Testfunktion verschiedene Arten von Werten zurückgegeben werden.
Es ist eigentlich sehr wichtig, diesen Punkt zu unterscheiden, zumindest wenn man sich den Code einer objektorientierten Framework-Klassenbibliothek ansieht, wird es weniger Verwirrung geben.