torna alle lezioni

Applicazione parziale per login

importanza: 5

Il compito è una variante leggermente più complessa di Correggi una funzione che ha perso "this".

L’oggetto user è stato modificato. Ora al posto delle due funzioni loginOk/loginFail, ha una sola funzione user.login(true/false).

Cosa dovremmo passare a askPassword nel codice qui sotto, in modo che chiami user.login(true) come ok e user.login(false) come fail?

function askPassword(ok, fail) {
  let password = prompt("Password?", '');
  if (password == "rockstar") ok();
  else fail();
}

let user = {
  name: 'John',

  login(result) {
    alert( this.name + (result ? ' logged in' : ' failed to log in') );
  }
};

askPassword(?, ?); // ?

Le tue modifiche dovrebbero solo interessare la porzione di codice evidenziata.

  1. Puoi sia utilizzare una funzione wrapper, che una arrow per essere concisi:

    askPassword(() => user.login(true), () => user.login(false));

    Ora riceve user dalla variabile esterna ed esegue la funzione in maniera corretta.

  2. Oppure creare una funzione parziale da user.login che utilizzi user come contesto ed abbia il giusto primo argomento:

    askPassword(user.login.bind(user, true), user.login.bind(user, false));