Pengaplikasian parsial untuk login
Tugas yang ini adalah varian yang sedikit lebih sulit daripada Perbaiki sebuah fungsi yang telah kehilangan "this".
Objek user
nya 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.
-
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.
-
Atau buat sebuah fungsi mini dari
user.login
yang menggunakanuser
sebagai konteksnya dan yang mana mempunyai argumen pertama yang benar:askPassword(user.login.bind(user, true), user.login.bind(user, false));