آموزش ویژگی های 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 سه ورودی رو دریافت میکنه:

  • کلاس یا تابعی که قراره فراخوانی بشه
  • آرایه ای از آرگومان ها
  • مشخص کردن new.target (اختیاری می باشد)

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

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

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

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

متد Reflect.isExtensible

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

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

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

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

متد Reflect.preventExtension

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

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

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

یا علی

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.