Sobes.tech
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:
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 կոնտեքստը պահպանելու համար արտաքին ֆունկցիայից, մինչդեռ սովորական ֆունկցիաներն ու մեթոդները ունեն իրենց սեփական this արժեքը կանչման ձևից կախված։