偏函数在登录中的应用
重要程度: 5
这个任务是比 修复丢失了 "this" 的函数 略微复杂的变体。
user 对象被修改了。现在不是两个函数 loginOk/loginFail,现在只有一个函数 user.login(true/false)。
在下面的代码中,我们应该向 askPassword 传入什么参数,以使得 user.login(true) 结果是 ok,user.login(false) 结果是 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(?, ?); // ?
        你只能修改高亮部分的代码。
- 
使用包装(wapper)函数,箭头函数很简洁:
askPassword(() => user.login(true), () => user.login(false));现在它从外部变量中获得了
user,然后以常规方式运行它。 - 
或者从
user.login创建一个偏函数,该函数使用user作为上下文,并具有正确的第一个参数:askPassword(user.login.bind(user, true), user.login.bind(user, false));