JavaScript-те ООП-те әдіс кодының контексті жоғалтуы

Сынып әдісінің бастапқы кодын қолданған кезде контекст жоғалуы мүмкін. Мысал арқылы қарастырайық. Бізде келесі сынып бар делік:

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

Осы сыныптың нысанын жасайық:

javascriptlet user = new User('john');

Әдіс кодын айнымалыға жазайық:

javascriptlet func = user.getName;

Әдіс айнымалыға жазылған сәтте контекст жоғалды. Енді әдіс кодының ішіндегі this сынып нысанына сілтемейді. Функциямызды шақырып, тексерейік:

javascriptconsole.log(func()); // қате

Мәселені шешу үшін функцияға контекстті байлауға болады, мысалы, bind арқылы:

javascriptfunc = func.bind(user);
console.log(func()); // жұмыс істейді