Kehilangan Konteks dalam Kode Metode di OOP JavaScript

Saat menggunakan kode asli metode kelas, konteks bisa hilang. Mari kita lihat contohnya. Misalkan kita memiliki kelas berikut:

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

Mari buat objek dari kelas ini:

javascriptlet user = new User('john');

Mari rekam kode metode ke dalam variabel:

javascriptlet func = user.getName;

Pada saat merekam metode ke dalam variabel, konteksnya hilang. Sekarang this di dalam kode metode tidak akan menunjuk pada objek kelas. Mari kita periksa, panggil fungsi kita:

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

Untuk menyelesaikan masalah ini, kita dapat mengikat konteks ke fungsi, misalnya, melalui bind:

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