بازگشت به درس

کاربرد تابع جزئی برای وارد شدن

اهمیت: 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: 'John',

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