Sebenarnya artikel ini masih ada hubungannya dengan artikel Function pada postingan sebelumnya tapi saya putuskan untuk ditulis pada postingan tersendiri, mengingat jika dijadikan satu akan menjadi panjang. Artikel memang saya batasi pembahasannya tidak terlalu panjang, selesai dibaca 5 - 10 menit karena itulah waktu efektif membaca, membaca lebih dari 15 menit membutuhkan konsentrasi lebih.
Call
call adalah fungsi yang bisa mengganti nilai dari keyword this didalam sebuah fungsi dengan nilai apapun.
const kaligunung = {
nama: 'SDN Kaligunung III',
kode: 'SDKG3',
catatan: [],
kelas(tingkat, guru) {
console.log(
`${guru} adalah wali murid di sekolah ${this.nama} kelas ${tingkat}`
);
this.catatan.push({kelas: `${this.kode}${tingkat}`, guru});
},
};
kaligunung.kelas('2Q', 'Harry Potter');
kaligunung.kelas('2A', 'Hermione Granger');
console.log(kaligunung);
const kalisari = {
nama: 'SDN Kalisari IV',
kode: 'SDNKL4',
catatan: [],
};

Jika kita menggunakan cara biasa untuk meng-copy object.
const copySekolah = kaligunung.kelas;
console.log(copySekolah);
copySekolah('3D', 'Severus Snape');

copySekolah akan menjadi regular function sehingga keyword this bernilai undefined. Dengan menerapkan call hasilnya sebagai berikut.
copySekolah.call(kalisari, '2D', 'Severus Snape');
console.log(kalisari);

Apply
apply sama dengan call hanya saja kita bisa memasukkan array pada argument-nya.
const data = ['4A', 'Albus Dumbledore'];
copySekolah.apply(kalisari, data);
console.log(kalisari);
copySekolah.call(kaligunung, ...data);

Jika kita gunakan call dengan spread hasilnya juga sama.
Bind
bind menghasilkan fungsi lain yang bisa diekseskusi di lain waktu.
// sebelumnya buatlah element button di html dengan nama class 'btn'
kaligunung.kasKelas = 100000;
kaligunung.tambahKas = function () {
console.log(this);
this.kasKelas += 1000;
console.log(this.kasKelas);
};
document.querySelector('.btn').addEventListener('click', kaligunung.tambahKas);
Jika kita klik element button di html hasilnya sebagai berikut.

keyword this akan mengacu kepada element yang dieksekusi, bukan pada object kaligunung. Jika kita ubah kodenya seperti ini.
document
.querySelector('.btn')
.addEventListener('click', kaligunung.tambahKas.bind(kaligunung)); // 'this' keyword mengacu kepada object kaligunung
this keyword mengacu ke object kaligunung sehingga setiap kita klik element button nilai kas akan bertambah.

Top comments (0)