ログイン用の部分的なアプリケーション
重要性: 5
このタスクは Ask losing this 少しより複雑なバリアントです。
user
オブジェクトが修正されました。今、2つの関数 loginOk/loginFail
の代わりに、単一の関数 user.login(true/false)
があります。
下のコードでは、何を渡すと ok
として user.login(true)
を、fail
として user.login(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
をコンテキストとして使い、正しい1つ目の引数を持つuser.login
からの部分関数を作ります:askPassword(user.login.bind(user, true), user.login.bind(user, false));