کاربرد تابع جزئی برای وارد شدن
این تمرین نوع پیچیدهتر تابعی که "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));