تفاوت Arrow فانکشن ها و توابع معمولی در جاوااسکریپت - بخش دوم

در گفتار قبل (لینک زیر) درباره نحوه برخورد Arrow فانکشن و فانکشن های معمولی با مقدار this را توضیح دادیم.

https://vrgl.ir/oS9IT

سایر تفاوت به شرح ذیل تقدیم می گردد.

۲- سازنده ها (Constructors)

همانطور که در گفتار قبل دیدیم با فانکشن های معمولی می توانند به سادگی یک آبجکت ایجاد کنیم

اما همین کار را نمی توانیم با arrow فانکشن ها انجام دهیم و خطای TypeError می گیریم

۳ - متدها

استفاده از فانکشن معمولی یک راه معمول برای ایجاد یک متد در یک کلاس است.

در کلاس Hero زیر متد logName با استفاده از فانکشن معمولی است.

بعضی وقت نیاز داریم که متد یک کلاس را به عنوان callback صدا کنیم و با این روش به مشکل می خوریم

برای مثال استفاده از متد logName به عنوان callback در setTimeout :

بعد از یک ثانیه در کنسول undefined چاپ می شود زیرا setTimeout یک فراخوانی ساده را انجام می دهد که در آن this در آن global آبجکت است و چون در گلوبال آبجکت متد logName وجود ندارد و بنابراین undefined برمی گرداند.

جهت رفع این مشکل باید به صورت دستی مقدار this را به context صحیح به صورت زیر bind کنیم.

با این روش مقدار this به شی یا (instance) - بتمن می چسبانیم یا bind می نماییم.

اما یک راه ساده برای رفع این مشکل استفاده از arrow فانکشن است که آن متد به صورت lexically به کلاس می چسبد و یا خودکار bind می شود.