レッスンに戻る

部分的なログイン申請

重要性: 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(?, ?); // ?

あなたの変更は、ハイライトされたフラグメントだけを変更する必要があります。

  1. ラッパー関数を使用するか、簡潔にするためにアローを使用します。

    askPassword(() => user.login(true), () => user.login(false));

    今、それは外部変数からuserを取得し、通常どおり実行します。

  2. または、userをコンテキストとして使用し、正しい最初の引数を持つuser.loginから部分関数を生成します。

    askPassword(user.login.bind(user, true), user.login.bind(user, false));