კონტექსტის დაკარგვა მეთოდის კოდში 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()); // მუშაობს