Middle
გააზიარე ამ შესახებ სხვადასხვა კონტექსტში: ობიექტის მეთოდებში, სლაკის ფუნქციებში და ჩვეულებრივ ფუნქციებში.
sobes.tech AI
პასუხი AI-სგან
JavaScript-ში this მნიშვნელობა დამოკიდებულია ფუნქციის გამოძახების კონტექსტზე:
- ობიექტის მეთოდებში
thisმიუთითებს იმ ობიექტზე, რომელსაც ეკუთვნის მეთოდი:
const obj = {
name: 'Alice',
greet() {
console.log(this.name);
}
};
obj.greet(); // Alice
- სადაც ჩვეულებრივი ფუნქცია (მეთოდი არაა)
thisდამოკიდებულია რეჟიმსა და გამოძახების მეთოდზე:- მკაცრ რეჟიმში (
'use strict') —thisიქნებაundefined. - არამკაცრ რეჟიმში — გლობალურ ობიექტზე (
windowბრაუზერში).
- მკაცრ რეჟიმში (
function foo() {
console.log(this);
}
foo(); // window ან strict რეჟიმში `undefined`
- ფუნქციებში სროლა
thisლექსიკალურად მემკვიდრეობით გადაეცემა გარედან კონტექსტს, ანუ იმ სფეროდან, სადაც ფუნქცია გამოაცხადა, არა სადაც გამოიძახა:
const obj = {
name: 'Bob',
arrowFunc: () => {
console.log(this.name);
},
regularFunc() {
const arrow = () => {
console.log(this.name);
};
arrow();
}
};
obj.arrowFunc(); // undefined ან გარედან კონტექსტის სახელი
obj.regularFunc(); // Bob
ამიტომ, სროლა ფუნქციები სასარგებლოა this კონტექსტის შენარჩუნებისთვის გარედან ფუნქციიდან, ხოლო ჩვეულებრივი ფუნქციები და მეთოდები საკუთარი მნიშვნელობით არიან, გამოძახების მეთოდზე დამოკიდებული.