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

ما قصد داریم این پروژهٔ متن‌باز را در دسترس همهٔ مردم در سرتاسر دنیا قرار دهیم.

به ترجمهٔ محتوای این آموزش به زبان خودتان کمک کنید/a>.

بازگشت به درس

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

اهمیت: 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));