Mi a kontextus egy függvényben?
sobes.tech MI
Válasz az MI-től
A JavaScript függvényben a (this) kontextus attól függ, hogyan hívták meg a függvényt, nem attól, hol lett deklarálva. Ez a hívó objektumra vagy arra az objektumra utal, amelyhez a függvény tartozik vagy amit meghív.
A kontextus meghatározásának módjai:
-
Globális kontextus: Függvényen kívül, vagy ha a függvényt nem egyértelmű objektummal hívják meg (
thisa böngészőben a globáliswindowobjektum, Node.js-ben aglobal, vagy strict módbanundefined).// Böngészőben console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Objektum kontextus (metódus): Ha a függvényt egy objektum metódusaként hívják (
obj.method()), akkor athisa függvényen belül erre az objektumra mutat.const user = { name: 'Alice', greet: function() { console.log(`Szia, a nevem ${this.name}`); } }; user.greet(); // Szia, a nevem Alice -
Konstruktor kontextus: Ha a függvényt a
newkulcsszóval hívják (new MyClass()), akkor egy új objektum jön létre, és athisebben a konstruktorban erre az új objektumra mutat.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Kézi kontextus megadása: A
call,applyésbindmódszerek lehetővé teszik athisértékének explicit beállítását a függvényhívás során.call(thisArg, arg1, arg2, ...): A függvényt a megadottthisértékkel és argumentumokkal hívja meg, külön-külön.apply(thisArg, [argsArray]): A függvényt a megadottthisértékkel és egy argumentumokat tartalmazó tömbbel hívja meg.bind(thisArg, arg1, arg2, ...): Egy új függvényt ad vissza, amelynek athisértéke rögzítve van a megadott értékre.
function displayInfo(age) { console.log(`${this.name} ${age} éves.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie 30 éves. displayInfo.apply(person, [35]); // Charlie 35 éves. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie 40 éves. -
Nyíl függvények: A nyíl függvények saját
this-el nem rendelkeznek. Athisértékét a lexikális környezetből öröklik (ahol definiálták őket).const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Szia, a nyíl függvényből, ${this.name}`); }; innerArrow(); // a `this` itt anotherUser, öröklődik a sayHello-ból }, sayHelloBad: () => { // rossz gyakorlat az objektum metódusainál console.log(`Szia, a nyíl függvényből, ${this.name}`); } }; anotherUser.sayHello(); // Szia, a nyíl függvényből, David // Böngészőben, strict módban kívül anotherUser.sayHelloBad(); // Szia, a nyíl függvényből, undefined (a `this` a window)
A kontextus megértése kritikus a JavaScript objektumok, metódusok és eseménykezelők helyes működéséhez.