Co je to kontext ve funkci?
sobes.tech AI
Odpověď od AI
Kontext (this) ve funkci JavaScript je definován tím, jak byl funkce volána, nikoliv tím, kde byla deklarována. Ukazuje na objekt, kterému funkce patří nebo který volá.
Způsoby určení kontextu:
-
Globální kontext: Mimo funkce, nebo pokud je funkce volána bez explicitního objektu (
thisbude odkazovat na globální objektwindowv prohlížeči,globalv Node.js, neboundefinedv režimu strict).// V prohlížeči console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Kontext objektu (metoda): Pokud je funkce volána jako metoda objektu (
obj.method()),thisuvnitř funkce odkazuje na tento objekt.const user = { jméno: 'Alice', pozdrav: function() { console.log(`Ahoj, jmenuji se ${this.jméno}`); } }; user.pozdrav(); // Ahoj, jmenuji se Alice -
Konstruktorový kontext: Při volání funkce s klíčovým slovem
new(new MyClass()), je vytvořen nový objekt athisuvnitř konstruktoru odkazuje na tento nový objekt.function Person(jméno) { this.jméno = jméno; } const osoba1 = new Person('Bob'); console.log(osoba1.jméno); // Bob -
Explicitní určení kontextu: Metody
call,applyabindumožňují explicitně nastavit hodnotuthispři volání funkce.call(thisArg, arg1, arg2, ...): Volá funkci s danýmthisa argumenty předanými jednotlivě.apply(thisArg, [argsArray]): Volá funkci s danýmthisa argumenty předanými jako pole.bind(thisArg, arg1, arg2, ...): Vrací novou funkci, kde jethispevně nastaven na danou hodnotu.
function displayInfo(age) { console.log(`${this.jméno} je ${age} let.`); } const osoba = { jméno: 'Charlie' }; displayInfo.call(osoba, 30); // Charlie je 30 let. displayInfo.apply(osoba, [35]); // Charlie je 35 let. const pevněNastavenáDisplayInfo = displayInfo.bind(osoba, 40); pevněNastavenáDisplayInfo(); // Charlie je 40 let. -
Šipkové funkce: Šipkové funkce nemají vlastní
this. Dědíthisz lexikálního prostředí (okolí, kde byly definovány).const anotherUser = { jméno: 'David', sayHello: function() { const innerArrow = () => { console.log(`Ahoj ze šipky, ${this.jméno}`); }; innerArrow(); // `this` zde je anotherUser, dědí se z sayHello }, sayHelloBad: () => { // špatná praxe pro metody objektu console.log(`Ahoj ze šipky, ${this.jméno}`); } }; anotherUser.sayHello(); // Ahoj ze šipky, David // V prohlížeči, mimo strict režim anotherUser.sayHelloBad(); // Ahoj ze šipky, undefined (this je window)
Porozumění kontextu je klíčové pro správnou práci s objekty, metodami a událostmi v JavaScriptu.