Grundlegender Unterschied zwischen fn () und neuem fn () in Javascript

12

In welchen Aspekten unterscheidet sich der Aufruf einer Funktion mit und ohne neues Schlüsselwort in Javascript? Ich meine, was alle Dinge unterscheiden zwischen?

testFn() vs. new testFn()

akp
quelle

Antworten:

13

newerstellt ein neues (leeres) Objekt und setzt thisdarauf, ruft dann die Funktion auf, die als Konstruktor für das Objekt fungiert (durch Manipulieren von this. etwas ). Wenn Sie dieselbe Funktion ohne das newSchlüsselwort aufrufen, wird sie auf das angewendet, was thisaktuell bedeutet.

user281377
quelle
Gibt es noch etwas dazu?
akp
@akp nein es ist wirklich so einfach. Außer, was nicht erwähnt wurde, ist, dass wenn die Funktion explizit einen Referenztyp zurückgibt, dieser von zurückgegeben wird newund das erstellte Objekt verschwendet wird.
Esailija
2
Durch newdie Verwendung wird der Prototyp des neuen Objekts so eingestellt, dass er auf den der ersten Funktion verweist, an die das neue Objekt übergeben wird. Ich denke nicht, dass Verhalten auf andere Weise legitim erreicht werden kann.
Supercat
Du hast recht, das habe ich verpasst.
user281377
1

Diese Varianten unterscheiden sich syntaktisch: Bei "neuer" Variante wird davon ausgegangen, dass die Funktion ein Konstruktor ist. Die Variante ohne "neu" setzt voraus, dass es sich nicht um einen Konstruktor handelt.

Gangnus
quelle