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