Կոնտեքստի կորուստ մեթոդի կոդում OOP-ում 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()); // աշխատում է