登录部分应用
重要性:5
此任务是 修复丢失“this”的函数 的更复杂变体。
user
对象已修改。现在它只有一个函数 user.login(true/false)
,而不是两个函数 loginOk/loginFail
。
在下面的代码中,我们应该将什么传递给 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(?, ?); // ?
您的更改应该只修改突出显示的部分。
-
可以使用包装函数,箭头函数更简洁
askPassword(() => user.login(true), () => user.login(false));
现在它从外部变量获取
user
,并以正常方式运行它。 -
或者从
user.login
创建一个部分函数,使用user
作为上下文,并具有正确的第一个参数。askPassword(user.login.bind(user, true), user.login.bind(user, false));