آموزش ویژگی های ECMAScript 6 (جلسه 43) : آموزش Reflect API - قسمت 2



visibility  
mode_comment   ۰

همونطور که اطلاع دارید در جلسه قبل بحث مربوط به Reflect API رو شروع کرده و مقدماتی در مورد اون رو قرار دادیم. در این جلسه میخوایم کار با Reflect API رو ادامه بدیم و تعدادی از متدهای اون رو با هم بررسی کنیم.

همونطور که در جلسه قبل دیدید، Reflect متدهای زیادی داره که یکی از اونا متد apply می باشد.

روشهای متنوع برای فراخوانی تابع

همونطور که میدونید میتونیم توابع مختلف رو به روشهای مختلفی فراخوانی کنیم. فرض کنید که یک تابع بصورت زیر به وجود بیاریم:

میبینید که یک تابع بنام sum تعریف کردیم و این تابع دو عدد رو میگیره و مجموع اونا رو به ما برمی گردونه. در خط آخر نیز این تابع رو با استفاده از پرانتز فراخوانی کردیم و عدد 1 و 2 رو به عنوان آرگومان به اون پاس دادیم. با اینکار عدد 3 در Console چاپ خواهد شد.

روشهای دیگه ای نیز برای فراخوانی تابع مورد نظر وجود داره.

شما میتونین از متدهای call یا apply مربوط به Function.prototype نیز تابع مورد نظرتون رو با زمینه یا Context دلخواه فراخوانی کنید. برای اینکار بصورت زیر عمل میکنیم:

همونطور که میبینید در خط 5 بجای استفاده از فراخوانی با پرانتز، متد apply برای تابع مورد نظر رو فراخوانی کردیم و مقادیر مورد نظرمون رو به اون پاس دادیم. میبینید که به عنوان آرگومان اول undefined رو پاس دادیم و شما میتونین بجای این مقدار، شئ مورد نظرتون که قصد دارید برای زمینه یا Context قرار بگیره رو مشخص کنید. آرگومان دوم متد apply یک آرایه می باشد که شامل همه آرگومانهایی هست که تابع مورد نظر باید با اونا صدا زده بشه. پس با اینکار مجددا مقدار 3 در Console چاپ خواهد شد

متخصص جاوا اسکریپت
با جاوا اسکریپت جادوگری کنید! آیا می دونید با زبان جاوااسکریپت می تونید، برای فرانت اند و بک اند وبسایت ها برنامه نویسی کنید؟ همینطور اپلیکیشن دسکتاپ و موبایل بسازید؟ اگر دوست داری اینکارها رو انجام بدی و React, ElectronJS, ReactNative, NodeJS,MongoDB و ... رو تو یه دوره یاد بگیری، متخصص جاوااسکریپت سون لرن رو حتما ببین : متخصص جاوا اسکریپت arrow_back

در خط 6 از متد call استفاده کردیم و تنها تفاوت متد call با apply اینه که آرگومانها دیگه نیازی نیست که درون آرایه قرار بگیرند و باید یکی یکی اونا رو با کاما از هم جدا کنید. خروجی مانند قبل 3 خواهد بود.

متد Reflect.apply

حالا میخوایم روش چهارم برای فراخوانی تابع رو بهتون آموزش بدیم و اون هم استفاده از متد apply مربوط به شئ سراسری Reflect می باشد. این متد 3 ورودی رو دریافت میکنه:

  • تابعی که باید فراخوانی شود
  • زمینه یا Context
  • آرایه ای از آرگومانها برای فراخوانی تابع

خب حالا برای اینکه تابع بالا رو به این روش فراخوانی کنیم، بصورت زیر عمل میکنیم:

میبینید که نام تابع sum رو با زمینه undefined و آرگومانهای 1 و 2 فراخوانی کردیم. همانند قبل در Console عدد 3 چاپ خواهد شد.

کار کردن با زمینه یا Context

همونطور که در کدهای بالا میبینید، زیاد از زمینه یا Context استفاده کردیم. حالا میخوایم مقداری بیشتر در مورد این موضوع صحبت کنیم. وقتی شما تابع رو بصورت ساده و با استفاده پرانتز فراخوانی میکنید، تابع با زمینه اصلی صدا زده میشه و نمیتونین اون رو تغییر بدین. برای مشاهده زمینه فعلی تابع، میتونین کلمه this رو در Console چاپ کنید. کد زیر رو ببینید:

اگر خروجی رو ببینید بصورت زیر خواهد بود:

میبینید که زمینه تابع sum، شئ سراسری window می باشد. پس بصورت پیش فرض زمینه تمامی توابع شئ سراسری window است.

برخلاف روش بالا که امکان تغییر زمینه در اون وجود ندارد، در سه روش بعدی میتونین context رو متناسب با نیازتون تغییر بدین. مثلا کد زیر رو ببینید:

میبینید که در سه خط آخر، تابع رو به روشهای مختلف فراخوانی کردیم. برخلاف کدهای قبلی، بجای undefined شئ obj رو به عنوان زمینه قرار دادیم. شئ obj رو در خط 5 تعریف کرده و ویژگی name رو برای اون برابر با Mohammad قرار دادیم. حالا زمانی که تابع فراخوانی میشه، مقدار this.name در Console چاپ میشه. کلمه this به شئ obj اشاره میکنه و در نتیجه Mohammad در خروجی چاپ میشه.

همونطور که میبینید استفاده از Reflect.apply سر راست تر هست و بهتره که از این روش بجای روشهای دیگه استفاده بشه. این روش نسبت به روشهای قبلی تفاوت های جزئی دارد که میتونین در اینجا در مورد اون بیشتر مطالعه کنید.

موفق و پیروز باشید.

یا علی

comment دیدگاه کاربران
ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.