A `this` végrehajtási kontextus értéke mitől függ JavaScriptben?
sobes.tech MI
Válasz az MI-től
A this értéke JavaScriptben függ a függvény hívási módjától. Fő forgatókönyvek:
-
Globális kontextus: Függvényen kívül, szigorú módban (
'use strict')thisundefined. Szabvány módban pedig a globális objektum (window böngészőben,global` Node.js-ben). -
Objektum metódusának hívása:
thisaz objektumra mutat, amelyhez a hívott metódus tartozik.const obj = { prop: 'érték', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Egyszerű függvényhívás: Szigorú módban
thisundefined. Szabvány módban a globális objektum.function myFunction() { // szigorú módban this === undefined // szabvány módban this === window (böngészőben) console.log(this); } myFunction(); -
Konstruktor (
new): Anewoperátorral hívott függvénybenthisaz újonnan létrehozott objektumra mutat.function MyClass(name) { this.name = name; // this === új objektum } const instance = new MyClass('teszt'); // instance.name === 'teszt' -
Kifejezett kötés (
call,apply,bind): Ezek a módszerek lehetővé teszikthisértékének explicit beállítását.call(thisArg, arg1, arg2, ...): meghívja a függvényt,thisértékétthisArg-ra állítva, és argumentumokat külön-külön adva át.apply(thisArg, [argsArray]): meghívja a függvényt,thisértékétthisArg-ra állítva, és argumentumokat tömbként adva át.bind(thisArg): egy új függvényt ad vissza, amelyhez rögzítettthisérték tartozik.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Kiírja 42 -
Nyílfüggvények (
=>): A nyílfüggvények sajátthis-el nem rendelkeznek. Athisértéke öröklődik a lexikális környezetből, ahol definiálták.const outerObj = { name: 'Külső', method: function() { const arrowFunc = () => { // itt a `this` az outerObj `method`-jától öröklődik console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Kiírja 'Külső' const anotherArrowFunc = () => { // itt a `this` a globális környezetből öröklődik (vagy undefined szigorú módban) console.log(this); }; anotherArrowFunc(); -
Eseménykezelők DOM-ban: A legtöbb esetben a
thisaz eseménykezelőben az elemre mutat, ahol az esemény történt.// Böngészőben példa const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Ezeknek a mechanizmusoknak a megértése kritikus a this helyes használatához JavaScriptben.