偏函数在登录中的应用
重要程度: 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
)
)
;