Čo je to kontext vo funkcii?
sobes.tech AI
Odpoveď od AI
Kontext (this) vo funkcii v JavaScripte je definovaný podľa spôsobu, akým bola funkcia volaná, nie podľa toho, kde bola deklarovaná. Ukazuje na objekt, ktorému funkcia patrí alebo ktorý ju volá.
Spôsoby určenia kontextu:
-
Globálny kontext: mimo funkcií, alebo ak je funkcia volaná bez explicitného objektu (
thisbude odkazovať na globálny objektwindowv prehliadači,globalv Node.js, aleboundefinedv režime strict).// V prehliadači console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Kontext objektu (metóda): Ak je funkcia volaná ako metóda objektu (
obj.method()),thisvo vnútri funkcie bude odkazovať na tento objekt.const user = { name: 'Alice', greet: function() { console.log(`Ahoj, volám sa ${this.name}`); } }; user.greet(); // Ahoj, volám sa Alice -
Kontext konštruktora: Pri volaní funkcie s kľúčovým slovom
new(new MyClass()), sa vytvorí nový objekt, athisvnútri konštruktora odkazuje na tento nový objekt.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Explicitné určenie kontextu: Metódy
call,applyabindumožňujú explicitne nastaviť hodnotuthispri volaní funkcie.call(thisArg, arg1, arg2, ...): Volá funkciu s danýmthisa argumentmi, odovzdanými jednotlivé.apply(thisArg, [argsArray]): Volá funkciu s danýmthisa argumentmi v podobe poľa.bind(thisArg, arg1, arg2, ...): Vráti novú funkciu, v ktorej jethispevne nastavené na danú hodnotu.
function displayInfo(age) { console.log(`${this.name} má ${age} rokov.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie má 30 rokov. displayInfo.apply(person, [35]); // Charlie má 35 rokov. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie má 40 rokov. -
Šípové funkcie: Šípové funkcie nemajú vlastný
this. Dedičiathisz lexikálneho prostredia (oblasti viditeľnosti, kde boli definované).const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Ahoj zo šipky, ${this.name}`); }; innerArrow(); // `this` tu je anotherUser, dedí sa od sayHello }, sayHelloBad: () => { // zlá prax pre metódy objektu console.log(`Ahoj zo šipky, ${this.name}`); } }; anotherUser.sayHello(); // Ahoj zo šipky, David // V prehliadači, mimo strict režimu anotherUser.sayHelloBad(); // Ahoj zo šipky, undefined (this je window)
Porozumenie kontextu je kľúčové pre správnu prácu s objektmi, metódami a udalosťami v JavaScripte.