Application de fonction partielle pour login
La tâche est une variante un peu plus complexe de Fix a function that loses "this".
L’objet user
a été modifié. Maintenant, au lieu de deux fonctions loginOk/loginFail
, il a une seule fonction user.login(true/false)
.
Que faire passer à askPassword
dans le code ci-dessous, de sorte qu’il appelle user.login(true)
comme ok
et user.login(false)
comme 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(?, ?); // ?
Vos modifications doivent uniquement modifier le fragment surligné.
-
Soit utiliser une fonction wrapper, une fléchée pour être concis:
askPassword(() => user.login(true), () => user.login(false));
Maintenant, elle obtient
user
des variables externes et l’exécute normalement. -
Ou créez une fonction partielle à partir de
user.login
qui utiliseuser
comme contexte et a le bon premier argument:askPassword(user.login.bind(user, true), user.login.bind(user, false));