OOP-da JavaScript-de metod kodynda kontekstiň ýitirilmegi

Klase metodunyň çykgyt kodyny ulanylanda kontekst ýitirilip bilner. Mysal üçin seredeliň. Bizde aşakdaky klase bolsun:

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

Bu klase degişli obyekti döreteliň:

javascriptlet user = new User('john');

Metod kodyny üýtgeýjä ýazalyň:

javascriptlet func = user.getName;

Metod üýtgeýjä ýazylýan pursatda kontekst ýitirildi. Indi this metod kodynyň içinde klase degişli obyekde görkezmez. Funksiýamyzy çagyryp barlalyň:

javascriptconsole.log(func()); // Ýalňyşlyk

Meseleni çözmek üçin funksiýa bilen konteksti, mysal üçin, bind arkaly, birikdirip bolýar:

javascriptfunc = func.bind(user);
console.log(func()); // Işleýär