返回課程

登入的部分應用

重要性:5

這個任務是一個稍微複雜一點的變體,類似於 修復一個會遺失「this」的函式

user 物件已被修改。現在它只有一個函式 user.login(true/false),而不是兩個函式 loginOk/loginFail

在下列程式碼中,我們應該傳遞什麼給 askPassword,以便它呼叫 user.login(true)ok,而 user.login(false)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(?, ?); // ?

你的變更應該只修改標示的片段。

  1. 使用包裝函數,或使用箭頭函數以簡潔表示

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

    現在它從外部變數取得 user,並以正常方式執行它。

  2. 或從 user.login 建立一個部分函數,使用 user 作為內容,並具有正確的第一個引數

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