로그인에 부분 적용하기
중요도: 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));