یک پست دیگر از this شناسی جاوا اسکریپت


چون قبلا قول داده بودم در خصوص this مطلبی بنویسم، این مطلب را منتشر می‌کنم. دوستان دیگری در اینجا و اینجا همین مطلب را به قلم خود توضیح داده‌اند.

من سعی می‌کنم مطلب را به شکل خلاصه و کنکوری بنویسم شاید در مرور مصاحبه به کار بیاید.

به ۴ شکل کلی می‌توان this را به کار برد و نتایج متفاوتی گرفت. برای تشخیص صحیح، به روش فراخوانی متدی که this در آن قرار دارد توجه کنید:

۱- اگر این متد با new صدا زده شده است. مقدار this همان آبجکتی است که در اثر صدا زدن متد با new حاصل می‌شود. ( احتمالن در بدنه متد مقداری به آن داده شده است)

مثال

var aberBank = new hesab(1000);
function hesab (mablagh) {
    this.mojoodi = mablagh;
}
console.log(aberBank.mojoodi); // 10000


۲- اگر متد با کمک متدهای call یا apply صدا زده شده باشد یا در انتهای فراخوانی آن bind وجود داشته باشد، در این صورت مقدار this همان چیزی است که به عنوان آرگومان به این متدها ارسال شده است.

var natije = mohasebat.call( inMoteghayerDarMethodeMohasebatHamanThisMishavad );
یا
var natije = mohasebat().bind( inMoteghayerDarMethodeMohasebatHamanThisMishavad );


۳- اگر متد به شکل یکی از propertyهای یک آبجکت صدا زده شده باشد، مقدار this همان آبجکتی است که تعریف این متد را در برگرفته است.

var natije = inObjectDarMethodeMohasebatHamanThisMishavad.mohasebat();


۴- اگر وضعیت متد مطابق با هیچ یک از موارد فوق نبود، در صورت فعال بودن strict mode مقدار this برابر با undefined و در غیر اینصورت آبجکت global است.

var natije = mohasebat();


تمام.