登入的部分應用
重要性: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(?, ?); // ?
你的變更應該只修改標示的片段。
-
使用包裝函數,或使用箭頭函數以簡潔表示
askPassword(() => user.login(true), () => user.login(false));
現在它從外部變數取得
user
,並以正常方式執行它。 -
或從
user.login
建立一個部分函數,使用user
作為內容,並具有正確的第一個引數askPassword(user.login.bind(user, true), user.login.bind(user, false));