Applicazione parziale per login
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.
-
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. -
Oppure creare una funzione parziale da
user.login
che utilizziuser
come contesto ed abbia il giusto primo argomento:askPassword(user.login.bind(user, true), user.login.bind(user, false));