კონტექსტის დაკარგვა მეთოდის კოდში OOP-ში JavaScript-ში
კლასის მეთოდის საწყისი კოდის გამოყენებისას შეიძლება დაიკარგოს კონტექსტი. მოდით შევხედოთ მაგალითს. დავუშვათ, გვაქვს შემდეგი კლასი:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
შევქმნათ ამ კლასის ობიექტი:
let user = new User('john');
მეთოდის კოდი ჩავწეროთ ცვლადში:
let func = user.getName;
მეთოდის ცვლადში ჩაწერის მომენტში
კონტექსტი დაიკარგა. ახლა this
მეთოდის კოდის შიგნით აღარ აღნიშნავს
კლასის ობიექტს. შევამოწმოთ, გამოვიძახოთ
ჩვენი ფუნქცია:
console.log(func()); // შეცდომა
პრობლემის გადასაჭრელად შესაძლებელია კონტექსტის მიბმა
ფუნქციასთან, მაგალითად,
bind-ის მეშვეობით:
func = func.bind(user);
console.log(func()); // მუშაობს