Na čo závisí hodnota kontextu vykonávania `this` v JavaScripte?
sobes.tech AI
Odpoveď od AI
Hodnota this v JavaScripte závisí od spôsobu volania funkcie. Hlavné scenáre:
-
Globálny kontext: mimo funkcií, v režime prísnosti (
'use strict') jethisundefined. Bez režimu prísnosti — globálny objekt (windowv prehliadači,globalv Node.js). -
Volanie metódy objektu:
thisodkazuje na objekt, ktorému patrí volaná metóda.const obj = { prop: 'hodnota', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Bežné volanie funkcie: V režime prísnosti je
thisundefined. Bez režimu prísnosti — globálny objekt.function myFunction() { // v režime prísnosti this === undefined // bez režimu prísnosti this === window (v prehliadači) console.log(this); } myFunction(); -
Konstruktor (
new): Pri použitínews konštrukčnou funkciou,thisvo vnútri funkcie odkazuje na nový vytváraný objekt.function MyClass(name) { this.name = name; // this === nový objekt } const instance = new MyClass('test'); // instance.name === 'test' -
Explicitné viazanie (
call,apply,bind): Tieto metódy umožňujú explicitne nastaviť hodnotuthispre funkciu.call(thisArg, arg1, arg2, ...): volá funkciu, nastavujúcthisnathisArga argumenty zvlášť.apply(thisArg, [argsArray]): volá funkciu, nastavujúcthisnathisArga argumenty ako pole.bind(thisArg): vráti novú funkciu s pevne viazanou hodnotouthis.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Vypíše 42 -
Šípové funkcie (
=>): Šípové funkcie nemajú vlastnéthis. Hodnotathisv šípovej funkcii dedí z lexikálneho kontextu, v ktorom bola definovaná.const outerObj = { name: 'Vonkajší', method: function() { const arrowFunc = () => { // this tu dedí od `method`, ktorý je volaný ako metóda outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Vypíše 'Vonkajší' const anotherArrowFunc = () => { // this tu dedí od globálneho kontextu (alebo undefined v režime prísnosti) console.log(this); }; anotherArrowFunc(); -
Obsluhovače udalostí v DOM: Vo väčšine prípadov,
thisv obsluhovači udalosti odkazuje na element DOM, na ktorom sa udalosť stala.// Príklad v prehliadači const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Pochopenie týchto mechanizmov je kľúčové pre správne používanie this v JavaScripte.