Perbedaan mendasar antara fn () dan fn () baru dalam javascript

12

Dalam semua aspek apa, memanggil fungsi dengan dan tanpa kata kunci baru berbeda dalam javascript? Maksud saya apa semua hal berbeda di antara?

testFn() vs. new testFn()

akp
sumber

Jawaban:

13

newmembuat objek (kosong) baru dan mengaturnya this, lalu memanggil fungsi, yang bertindak sebagai konstruktor untuk objek (dengan memanipulasi this. sesuatu ). Memanggil fungsi yang sama tanpa newkata kunci akan membiarkannya bertindak apa pun yang thissaat ini berarti.

pengguna281377
sumber
Apakah ada yang lebih dari ini?
akp
@pak tidak, ini benar-benar sesederhana itu. Kecuali apa yang tidak disebutkan adalah bahwa jika fungsi secara eksplisit mengembalikan tipe referensi, yang dikembalikan oleh newdan objek yang dibuat terbuang sia-sia.
Esailija
2
Penggunaan newakan menyebabkan prototipe objek baru diatur ke referensi fungsi pertama yang dilewati objek baru. Saya tidak berpikir bahwa perilaku dapat dicapai secara sah melalui cara lain.
supercat
Anda benar, saya melewatkan itu.
user281377
1

Varian ini berbeda secara sintaksis: dengan varian "baru" mengandaikan bahwa fungsinya adalah konstruktor. Varian tanpa "baru" mengandaikan, bahwa itu bukan konstruktor.

Gangnus
sumber