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



visibility  
mode_comment   ۰

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

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

نمونه سازی با استفاده از new

با استفاده از این متد میتونین یک نمونه جدید از سازنده یا Constructor مورد نظرتون رو به وجود بیارید. قبل از معرفی این متد، از عملگر new برای نمونه سازی استفاده می کردیم. تقریبا میشه گفت هر دو روش یک کار رو انجام می دهند ولی همونطور که در جلسه اول مربوط به Reflect بیان کردیم، هدف اصلی Reflect نظم و Semantic یا معناگرایی می باشد و کاربر با استفاده از اون میتونه کارهای بسیار جزئی رو انجام بدهد.

فرض کنید که یک کلاس بصورت زیر داشته باشیم:

میبینید که یک کلاس بنام Car تعریف کرده و Constructor و متد getInfo رو برای اون قرار دادیم. حالا میتونیم با استفاده از new یک نمونه جدید از اون به وجود بیاریم:

میبینید که کلاس مورد نظر رو با 2 آرگومان Benz و 100000 نمونه سازی کردیم و شئ ساخته شده رو در متغیر benz ذخیره کردیم. حالا میتونیم موارد زیر رو انجام بدیم:

همونطور که میبینید در سه چیز مختلف رو در Console چاپ کردیم. در خط اول بررسی شده که benz نمونه ای از کلاس Car هست یا خیر. پاسخ true خواهد بود. در خط دوم شئ نمونه سازی شده رو چاپ کردیم. در خط آخر نیز متد getInfo مربوط به شئ benz رو فراخوانی کردیم. با اینکار خروجی بصورت زیر خواهد بود:

میبینید که همون چیزی که انتظار داشتیم به سادگی در Console چاپ شده است.

متد Reflect.construct

خب حالا میخوایم همین کار رو با استفاده از Reflect.construct نیز انجام بدیم.

متد construct سه ورودی رو دریافت میکنه:

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

خب اگر بخوایم کد بالا رو با استفاده از متد Construct بنویسیم، بصورت زیر عمل میکنیم:

میبینید که کلاس Car رو به عنوان ورودی اول و آرایه ای از آرگومانها رو به عنوان ورودی دوم قرار دادیم. خروجی همانند قبل خواهد بود. کل کدها بصورت زیر میشن:

more  بیشتر بخوانید : ترفندهای پیشرفته jQuery (قسمت 53)

اگر کد بالا رو اجرا کنید، خروجی همانند گذشته میبینید.

ما در اینجا در مورد متد سوم که اختیاری بود خیلی توضیح نمیدیم و خودتون میتونین اون رو مطالعه کنید. برای مطالعه میتونین این لینک و این لینک رو ببینید.

متد Reflect.isExtensible

با استفاده از این متد میتونین بررسی کنید که یک شئ Extensible یا توسعه پذیر هست یا خیر. در صورت Extensible بودن true و در غیر اینصورت false برگشت داده می شود. زمانی به یک شئ Extensible گفته میشه که بتونیم آزادانه ویژگی های جدیدی رو به اون اضافه کنیم. بعضی اوقات به دلایلی پیش میاد که جلوی Extensible بودن یک شئ رو بگیریم تا اون شئ بصورت عمدی یا سهوی چیزی بهش اضافه نشود.

قبل از این متد از Object.isExtensible استفاده میشد که خیلی شبیه به هم هستند و یک تفاوت اندک در اونا وجود دارد. متد Object.isExtensible هر چیزی رو که بخواید بررسی میکنه و در صورت توسعه پذیر نبودن false رو برمی گردونه. اما اگر یک مقدار غیر شئ رو با Reflect.isExtensible بررسی کنید، یک ارور نمایش داده میشه.

more  بیشتر بخوانید : ترفندهای پیشرفته jQuery (قسمت 28)

میبینید که در خط اول یک شئ خالی بنام empty ایجاد کردیم و در خط دوم توسعه پذیر بودن اون رو تست کردیم. هر شئ بصورت پیش فرض توسعه پذیر هست و به همین خاطر نتیجه true خواهد بود.

قبل از سر کار اومدن ES6 با استفاده از دو متد Object.seal و Object.freeze میتونستیم جلوی توسعه پذیر بودن یک شئ رو بگیریم. همونطور که در بالا میبینید، بعد از استفاده از دو متد، مجددا توسعه پذیری رو چک کردیم و این بار خروجی false می باشد.

متد Reflect.preventExtension

با استفاده از این متد میتونین همانند متدهای بالا و متد Object.preventExtension، مانع توسعه پذیر بودن یک شئ رو بگیرید. برای اینکار بصورت زیر عمل میکنیم:

همونطور که میبینید قبل از استفاده از این متد، خروجی true و بعد از استفاده از اون خروجی false خواهد شد. هر چیزی غیر از شئ رو به این متد ارسال کنید، یک ارور دریافت خواهید کرد.

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

یا علی

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

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