로그인에 부분 적용하기
중요도: 5
이 과제는 this 값이 undefined인 함수 고치기를 변형한 좀 더 복잡한 과제입니다.
여기서는 user
객체를 수정해 user가 loginOk
, loginFail
대신에 오직 하나의 함수 user.login(true·false)
만 가질 수 있게 해놓았습니다.
user.login(true)
는 ok
, user.login(false)
은 fail
을 호출하게 하려면 askPassword
에 무엇을 넘겨줘야 할까요?
function
askPassword
(
ok,
fail
)
{
let
password =
prompt
(
"비밀번호를 입력해주세요."
,
''
)
;
if
(
password ==
"rockstar"
)
ok
(
)
;
else
fail
(
)
;
}
let
user =
{
name
:
'John'
,
login
(
result
)
{
alert
(
this
.
name +
(
result ?
' 로그인 성공'
:
' 로그인 실패'
)
)
;
}
}
;
askPassword
(
?
,
?
)
;
// ?
색칠된 줄의 물음표 부분만 수정해야 합니다.
-
래퍼 함수나 화살표 함수를 사용하면 간결하게 원하는 기능을 구현할 수 있습니다.
askPassword
(
(
)
=>
user.
login
(
true
)
,
(
)
=>
user.
login
(
false
)
)
;
이 방법을 사용하면 askPassword는 외부 변수에서
user
를 가져오기 때문에 원하는 결과를 얻을 수 있습니다. -
컨텍스트가
user
이면서 올바른 첫 번째 인수가 있는 부분 적용 함수를 만들면 원하는 기능을 구현할 수 있습니다.askPassword
(
user.
login
.
bind
(
user,
true
)
,
user.
login
.
bind
(
user,
false
)
)
;