Částečná aplikace pro přihlášení
Tato úloha je trochu složitější variantou úlohy Opravte funkci, která ztrácí „this“.
Objekt uživatel se změnil. Nyní má místo dvou funkcí přihlášeníOK/přihlášeníSelhalo jedinou funkci uživatel.přihlaš(true/false).
Co bychom měli předat funkci zeptejSeNaHeslo v následujícím kódu, aby volala uživatel.přihlaš(true) jako ok a uživatel.přihlaš(false) jako selhal?
function zeptejSeNaHeslo(ok, selhal) {
let heslo = prompt("Heslo?", '');
if (heslo == "rockstar") ok();
else selhal();
}
let uživatel = {
jméno: 'Jan',
přihlaš(výsledek) {
alert( this.jméno + (výsledek ? ' se přihlásil' : ' se nedokázal přihlásit') );
}
};
zeptejSeNaHeslo(?, ?); // ?
Vaše změny by měly modifikovat pouze zvýrazněnou část.
-
Buď použijeme obalovou funkci, pro stručnost šipkovou:
zeptejSeNaHeslo(() => uživatel.přihlaš(true), () => uživatel.přihlaš(false));Nyní načte proměnnou
uživatelz vnějších proměnných a funguje běžným způsobem. -
Nebo vytvoříme částečnou funkci z
uživatel.přihlaš, která používáuživateljako kontext a má příslušný první argument:zeptejSeNaHeslo(uživatel.přihlaš.bind(uživatel, true), uživatel.přihlaš.bind(uživatel, false));