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

- visibility ۲ mode_comment

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

خب در اینجا میخوایم دیگر متدهای مربوط به بازتاب رو آموزش بدیم.

متد Reflect.defineProperty

با استفاده از این متد همانند متد Object.defineProperty میتونیم یک ویژگی جدید رو به شئ مورد نظر اضافه کنیم و یا یک ویژگی شئ رو تغییر بدیم. برای هر ویژگی میتونیم تنظیمات configurable و writable و enumerable رو مشخص کنیم. مقدار پیش فرض این مقادیر false هستند. مثلا فرض کنید که بخوایم یک ویژگی جدید رو به یک شئ اضافه کنیم، برای اینکار بصورت زیر عمل میکنیم:

میبینید که این متد نیز همانند متد Object.defineProperty سه ورودی رو دریافت میکنه:

  • شئ مورد نظر که میخوایم ویژگی به اون اضافه کنیم
  • نام مورد نظر برای ویژگی
  • یک شئ که درون اون تنظیمات رو مشخص میکنیم. میبینید که در بالا مقدار value یا مقدار برای ویژگی name رو برابر با Mohammad قرار دادیم.

همچنین میتونیم با استفاده از این متد یک ویژگی و تنظیمات مربوط به اون رو تغییر بدیم. بصورت زیر:

میبینید که یک ویژگی برای شئ تعریف کردیم و با استفاده از defineProperty اون رو تغییر دادیم. تفاوتی که این متد با Object.defineProperty دارد بصورت زیر است:

  • در Object.defineProperty در صورت موفقیت، شئ برگشت داده میشه و در صورت شکست یک ارور نمایش داده میشه
  • در Reflect.defineProperty در صورت موفقیت، true و در غیر اینصورت false رو برگشت میده

همونطور که قبلا گفتیم بهتره از متدهای Reflect که در استاندارد جدید اومدن استفاده کنید. متدهای قدیمی و مشابه کم کم Deprecated و حذف خواهند شد.

متد Reflect.getOwnPropertyDescriptor

با استفاده از این متد همانند متد Object.getOwnPropertyDescriptor میتونین Descriptor یا شرح دهنده یکی از ویژگی های شئ مورد نظرتون رو بدست بیارید. یعنی تنظیماتی که با استفاده از متد بالا یعنی defineProperty انجام میدیم رو میتونیم با این متد بدست بیاریم. برای اینکار بصورت زیر عمل میکنیم:

میبینید که این متد دو ورودی رو دریافت میکنه. در ورودی اول نام شئ مورد نظر رو مشخص میکنید و در ورودی دوم نام ویژگی که میخواید Descriptor اون رو دریافت کنید، مشخص میکنید. خروجی بصورت زیر خواهد بود:

به همین راحتی. تفاوت این متد با متد مربوط به شئ Object:

  • اگر ورودی اول Reflect.getOwnPropertyDescriptor یک شئ نباشه، یک ارور نمایش داده میشه
  • اگر ورودی اول Object.getOwnPropertyDescriptor علاوه بر شئ، چیز دیگری هم باشه اول تبدیل صورت میگیره و بعد از اون توضیحات مربوط به ویژگی مورد نظر نمایش داده میشه. کد زیر رو در نظر بگیرید:

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

متد Reflect.deleteProperty

با استفاده از این متد میتونین ویژگی های مورد نظرتون رو از شئ حذف کنید. این متد تقریبا همانند با عملگر قدیمی delete کار میکنه و بهتره که دیگه از delete استفاده نشود. در صورت موفقیت در پاک کردن ویژگی مورد نظر true و در غیر این صورت false برگشت داده میشه. این متد 2 ورودی رو دریافت میکنه:

  1. نام شئ مورد نظر
  2. نام ویژگی که قصد پاک کردن اون رو دارید

مثالهای زیر رو در نظر بگیرید:

با اینکار به سادگی ویژگی مورد نظرمون رو حذف میکنیم.

متد Reflect.has

با استفاده از این متد میتونین وجود یا عدم وجود یک ویژگی در شئ مورد نظرتون رو بررسی کنید. این متد تقریبا همانند با عملگر in کار میکنه. در صورت وجود true و در صورت عدم وجود false برگشت داده میشه. این متد نیز دو ورودی رو دریافت میکنه. ورودی اول شئ مورد نظر و ورودی دوم ویژگی برای بررسی شدن. بصورت زیر:

به همین سادگی.

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

یا علی

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

عالی بود خوب توضیح دادید

محمد اسفندیاری

موفق باشید دوست عزیز

نیاز به لاگین

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