назад до уроку

Часткове застосування для логіну

важливість: 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("Пароль?", '');
  if (password == "rockstar") ok();
  else fail();
}

let user = {
  name: 'Іван',

  login(result) {
    alert( this.name + (result ? ' увійшов' : ' виконав невдалу спробу входу') );
  }
};

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));