Middle
Pověz o tom v různých kontextech: v metodách objektů, v šipkových funkcích a v běžných funkcích.
sobes.tech AI
Odpověď od AI
V JavaScriptu závisí hodnota this na kontextu volání funkce:
- V metodách objektu odkazuje
thisna objekt, kterému metoda patří:
const obj = {
jméno: 'Alice',
pozdrav() {
console.log(this.jméno);
}
};
obj.pozdrav(); // Alice
- V běžné funkci (ne v metodě) závisí
thisna režimu a způsobu volání:- V režimu přísném (
'use strict') —thisbudeundefined. - V ne přísném režimu — bude to globální objekt (
windowv prohlížeči).
- V režimu přísném (
function foo() {
console.log(this);
}
foo(); // window nebo undefined v režimu přísném
- V šipkových funkcích je
thislexikálně děděno z vnějšího kontextu, tj. z oblasti, kde byla funkce deklarována, nikoliv z místa volání:
const obj = {
jméno: 'Bob',
šipkováFunkce: () => {
console.log(this.jméno);
},
běžnáFunkce() {
const šipka = () => {
console.log(this.jméno);
};
šipka();
}
};
obj.šipkováFunkce(); // undefined nebo jméno z vnějšího kontextu
obj.běžnáFunkce(); // Bob
Proto jsou šipkové funkce užitečné pro zachování kontextu this z vnější funkce, zatímco běžné funkce a metody mají vlastní hodnotu this podle způsobu volání.