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:

javascriptclass User {
  #name;
  
  constructor(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

Mari buat objek kelas ini:

javascriptlet user = new User('john');

Mari catat kod kaedah ke dalam pembolehubah:

javascriptlet 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:

javascriptconsole.log(func()); // ralat

Untuk menyelesaikan masalah ini, kita boleh mengikat konteks kepada fungsi, contohnya, melalui bind:

javascriptfunc = func.bind(user);
console.log(func()); // berfungsi