Middle+
Čo sa stane, ak po sebe idúce spojíte dva kontexty?
sobes.tech AI
Odpoveď od AI
Ak sekvenčne spojíte dva kontexty pomocou metód call, apply alebo bind, druhý kontext bude ignorovaný. Pri všetkých týchto metódach sa dáva priorita prvému odovzdanému kontextu. Pri použití bind bude vytvorená nová funkcia s prvým kontextom viazaným.
Pozrime sa na príklad s bind:
// Objekt, ktorý simuluje prvý kontext
const context1 = {
name: 'Kontekst 1'
};
// Objekt, ktorý simuluje druhý kontext
const context2 = {
name: 'Kontekst 2'
};
// Funkcia, ktorá bude používať kontext
function greet() {
// Zobrazuje hodnotu vlastnosti 'name' aktuálneho kontextu (this)
console.log(`Ahoj z: ${this.name}`);
}
// Naviažeme funkciu greet na context1
const boundGreetToContext1 = greet.bind(context1);
// Pokus o opätovné naviazanie boundGreetToContext1 na context2
const boundGreetToContext2 = boundGreetToContext1.bind(context2);
// Zavoláme boundGreetToContext2
boundGreetToContext2(); // Výstup: Ahoj z: Kontekst 1
// Pri pokuse použiť call alebo apply na druhú naviazanú funkciu
boundGreetToContext2.call(context2); // Výstup: Ahoj z: Kontekst 1
boundGreetToContext2.apply(context2); // Výstup: Ahoj z: Kontekst 1
V tomto príklade má boundGreetToContext1 už naviazaný kontext context1. Opätovné naviazanie na context2 pomocou bind je ignorované. Volanie boundGreetToContext2 (ako aj jeho použitie s call alebo apply) vždy použije kontext nastavený pri prvom naviazaní (context1).