Keyword 'new' di JavaScript
Jika kita membuat suatu function
di JavaScript, kita bisa memanggil function
tersebut dengan atau tanpa keyword new
, apa bedanya?
Keyword new
Berdasarkan dokumentasi dari MDN, jika kita menggunakan new
pada saat kita memanggil suatu function
, maka kita akan mendapatkan sebuah turunan suatu object.
1 | var Foo = function () {}; |
Dari contoh diatas kita lihat bahwa kita akan mendapatkan suatu object turunan dari Foo jika kita menggunakan new
walaupun function
yang kita bikin tidak mengembalikan apa - apa (tidak menggunakan keyword return
). Bagaimana kalau function
itu kita buat agar mengembalikan sesuatu?
1 | var Foo = function () { |
Disini kita lihat perbedaan dengan fungsi sebelumnya, jika kita dengan sengaja mengembalikan suatu object, maka walaupun kita menggunakan new
object hasil dari function
tersebut bukan turunan dari Foo.
Dengan atau tanpa new
Berdasarkan contoh diatas apakah kita bisa membuat suatu function
yang akan mengembalikan suatu object yang mirip ketika function
itu dipanggil dengan atau tanpa keyword new
? kita coba saja.
1 | var Foo = function () { |
Ternyata bisa, bahkan inilah yang terjadi saat kita menggunakan new
saat memanggil suatu fungsi. Secara singkat yang terjadi adalah:
- Buat suatu object obj.
- Set prototype dari object obj dengan prototype dari Foo.
- Jalankan fungsi constructor dari Foo dengan argumen yang di
berikan dan variabel this diset dengan object obj yang barusan dibuat. - Kembalikan object hasil dari fungsi
constructor
, jika fungsicontructor
tidak mengembalikan suatu object maka object obj yang sebelunya dhasilkan yang akan dikembalikan.
Moral dari cerita diatas? selalu gunakan keyword new
jika kita mengharapkan suatu instance object, karena menggunakan new
lebih cepat dan program kita akan lebih mudah dibaca dan dimengerti :)