Kehilangan Konteks dalam Kod Kaedah dalam OOP di JavaScript
Apabila menggunakan kod sumber kaedah kelas, konteks boleh hilang. Mari kita lihat contoh. Katakan kita mempunyai kelas berikut:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Mari buat objek kelas ini:
let user = new User('john');
Mari catat kod kaedah ke dalam pembolehubah:
let func = user.getName;
Pada saat mencatat kaedah ke dalam pembolehubah,
konteks telah hilang. Sekarang this
di dalam kod kaedah tidak akan menunjuk
kepada objek kelas. Mari kita semak, panggil
fungsi kami:
console.log(func()); // ralat
Untuk menyelesaikan masalah ini, kita boleh mengikat
konteks kepada fungsi, contohnya,
melalui bind:
func = func.bind(user);
console.log(func()); // berfungsi