zpět k lekci

Částečná aplikace pro přihlášení

důležitost: 5

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.

  1. 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živatel z vnějších proměnných a funguje běžným způsobem.

  2. Nebo vytvoříme částečnou funkci z uživatel.přihlaš, která používá uživatel jako 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));