kembali ke pelajaran

Pengaplikasian parsial untuk login

Tugas yang ini adalah varian yang sedikit lebih sulit daripada Perbaiki sebuah fungsi yang telah kehilangan "this".

Objek usernya telah dimodifikasi. Sekarang daripada menggunakan dua fungsi loginOk/loginFail, sekarang hanya memiliki satu fungsi user.login(true/false).

Apa yang harus kita kirimkan kedalam askPassword di kode dibawah, apakah harus memanggul user.login(true) sebagai ok dan user.login(false) sebagai 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(?, ?); // ?

Ubahlah kodenya hanya pada bagian yang ditandai.

  1. Funakan fungsi pembungkus, lebih jelasnya gunakanlah fungsi arrow:

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

    Sekarang fungsi `user dapat diambil dari variabel luar dan dijalankan dengan normal.

  2. Atau buat sebuah fungsi mini dari user.login yang menggunakan user sebagai konteksnya dan yang mana mempunyai argumen pertama yang benar:

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