کاربرد تابع جزئی برای وارد شدن
این تمرین نوع پیچیدهتر تابعی که "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: 'John',
login(result) {
alert( this.name + (result ? ' وارد شد' : ' نتوانست وارد شود') );
}
};
askPassword(?, ?); // ?
تغییرات شما فقط باید قطعه برجسته شده را تغییر دهد.
-
برای کوتاه بودن یا از تابع دربرگیرنده استفاده کنید یا از تابع کمانی:
askPassword(() => user.login(true), () => user.login(false));
حالا
user
را از متغیرهای بیرونی دریافت میکند و به صورت معمولی آن را اجرا میشود. -
یا یک تابع جزئی از
user.login
بسازید که ازuser
به عنوان زمینه استفاده میکند و آرگومان اول درست را دارد:askPassword(user.login.bind(user, true), user.login.bind(user, false));