Podstawowa różnica między fn () a nową fn () w javascript

12

W jakim aspekcie wywoływanie funkcji z nowym słowem kluczowym i bez niego różni się w javascript? Mam na myśli, czym różnią się wszystkie rzeczy?

testFn() vs new testFn()

akp
źródło

Odpowiedzi:

13

newtworzy nowy (pusty) obiekt i ustawia się thisna nim, a następnie wywołuje funkcję, która działa jako konstruktor obiektu (manipulując this. czymś ). Wywołanie tej samej funkcji bez newsłowa kluczowego pozwoliłoby działać na cokolwiek, co thisobecnie oznacza.

użytkownik 281377
źródło
Czy jest w tym coś więcej?
akp
@akp nie, to naprawdę takie proste. Z wyjątkiem tego, o czym nie wspomniano, że jeśli funkcja wyraźnie zwraca typ odwołania, jest on zwracany przez newi tworzony obiekt jest marnowany.
Esailija,
2
Użycie newspowoduje, że prototyp nowego obiektu będzie ustawiony tak, aby odwoływał się do pierwszej funkcji, do której przekazywany jest nowy obiekt. Nie sądzę, że takie zachowanie można osiągnąć w inny sposób.
supercat
Masz rację, tęskniłem za tym.
user281377,
1

Te warianty różnią się składniowo: w wariancie „nowym” zakłada się, że funkcja jest konstruktorem. Wariant bez „nowych” przypuszcza, że to nie konstruktorem.

Gangnus
źródło