部分的なログイン申請
重要性: 5
タスクは「this」を失う関数の修正の少し複雑なバリエーションです。
user
オブジェクトが変更されました。現在では、2 つの関数loginOk/loginFail
の代わりに、単一の関数user.login(true/false)
があります。
以下のコードの中で、user.login(true)
をok
として、user.login(false)
をfail
として呼び出すために、askPassword
に何を渡す必要がありますか?
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
をコンテキストとして使用し、正しい最初の引数を持つuser.login
から部分関数を生成します。askPassword(user.login.bind(user, true), user.login.bind(user, false));