Na co závisí hodnota kontextu provádění `this` v JavaScriptu?
sobes.tech AI
Odpověď od AI
Hodnota this v JavaScriptu 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 je to 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 je to globálny objekt.function myFunction() { // v režime prísnosti je this === undefined // bez režimu prísnosti je this === window (v prehliadači) console.log(this); } myFunction(); -
Konštruktor (
new): Pri použití operátoranews konštrukčnou funkciou sathisvo 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 odovzdáva 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` je odvodzované od `method`, ktorá je volaná ako metóda outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Vypíše 'Vonkajší' const anotherArrowFunc = () => { // `this` je odvodzované od globálneho kontextu (alebo undefined v režime prísnosti) console.log(this); }; anotherArrowFunc(); -
Spracovatelia udalostí v DOM: Vo väčšine prípadov sa
thisv spracovateľovi udalosti odkazuje na DOM element, 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.