Использование частично применённой функции для логина
важность: 5
Это задание является немного усложнённым вариантом одного из предыдущих – Исправьте функцию, теряющую "this".
Объект user
был изменён. Теперь вместо двух функций loginOk/loginFail
у него есть только одна – user.login(true/false)
.
Что нужно передать в вызов функции 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));