Fungsi Factory dan Fungsi Constructor dalam JavaScript
Membuat objek satu per satu adalah sebuah kesalahan.
Jika Anda memiliki 100 teman sekelas dan perlu membuat objek untuk masing-masing dari mereka, menulis objek satu per satu akan menimbulkan masalah. Anda mengulang logika Anda terlalu sering. Anda juga berisiko terkena bug. Sebagai contoh, Anda mungkin secara tidak sengaja menimpa nama properti di bagian lain kode Anda.
Anda membutuhkan cara yang lebih baik untuk menggunakan kembali logika tersebut.
Factory Functions Bayangkan sebuah pabrik. Anda memasukkan bahan mentah dan mendapatkan produk jadi. Sebuah factory function melakukan hal yang sama. Ia menerima parameter dan mengembalikan objek baru.
Contoh:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
Pendekatan ini menjaga nama tetap aman. Anda tidak dapat secara tidak sengaja mengubah nama tersebut karena ia tetap berada di dalam cakupan (scope) fungsi. Anda menulis logikanya sekali dan menggunakannya berkali-kali.
Constructor Functions
Constructor functions juga membuat objek. Mereka menggunakan kata kunci this dan new. Secara konvensi, fungsi-fungsi ini dimulai dengan huruf kapital.
Contoh:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
Saat Anda menggunakan kata kunci new, JavaScript melakukan pekerjaan tersebut untuk Anda. Ia membuat objek baru, menetapkannya ke this, dan mengembalikannya secara otomatis. Anda tidak memerlukan pernyataan return.
Menskalakan kode Anda Anda dapat menggabungkan metode-metode ini dengan array untuk menangani data dalam jumlah besar.
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
classmates.forEach(c => console.log(c.reply()))
Ini membuat kode Anda bersih dan mudah diskalakan.
Tujuan utamanya sederhana:
- Tulis logika Anda sekali.
- Gunakan kembali di mana saja.
- Hindari pengulangan.
Sumber: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb