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

- visibility ۰ mode_comment

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

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

متد Reflect.getPrototypeOf

این متد همانند Object.getPrototypeOf مقدار prototype شئ مورد نظرتون رو برگشت میده و میتونین از اون استفاده کنید. این متد فقط یک ورودی رو دریافت میکنه و اون هم شئ مورد نظر برای دریافت prototype می باشد. اگر شئ مورد نظر ویژگی های به ارث برده شده نداشته باشد، مقدار null برگشت داده میشه. همچنین اگر ورودی مورد نظر شئ نباشد یک ارور در Console نمایش داده خواهد شد.

همونطور که در کد بالا مشاهده میکنید، یک کلاس تعریف کردیم و متد getName رو برای اون قرار دادیم. اگر خود benz که نمونه ساخته شده از کلاس Car می باشد رو در Console چاپ کنید، بصورت زیر خواهد بود:

همونطور که مشخص کردیم، این شئ یک ویژگی بنام __proto__ دارد که با استفاده از اون میتونین prototype یا متدهایی که این شئ بهشون دسترسی دارد رو مشاهده کنید. حالا به چند طریق میتونین به prototype دسترسی داشته باشید. بصورت زیر:

به هر کدام از روشهای بالا که عمل کنید، نتیجه یکسانی رو دریافت خواهید کرد و با هم برابر هستند. روش اول متد مربوط به Reflect می باشد که پیشنهاد میکنیم از این به بعد از اون استفاده کنید.

متد Reflect.setPrototypeOf

این متد همانند متد Object.setPrototypeOf عمل میکند. برعکس تابع بالا که با اون prototype مربوط به یک شئ رو بدست می آوردیم، با استفاده از این متد میتونیم یک شئ رو بعنوان prototype شئ دیگر قرار دهیم. این متد دو ورودی رو دریافت میکنه. ورودی اول شئ مورد نظر برای اضافه کردن prototype و ورودی دوم prototype مورد نظر می باشد. در صورت موفقیت در اضافه شدن prototype مقدار true و در غیر اینصورت مقدار false برگشت داده می شود. این متد در دو صورت ارور رو به شما نمایش میده:

  • ورودی اول شئ نباشد
  • ورودی دوم شئ یا null نباشد

برای مثال کد زیر رو ببینید:

همونطور که میبینید دو شئ obj و obj2 رو تعریف کردیم. برای obj2 یک متد تعریف کردیم و حالا میخوایم از این متد برای obj استفاده کنیم و مقدار ویژگی name رو برگشت بدیم. برای اینکار میتونیم شئ obj2 رو بعنوان prototype شئ obj قرار بدیم تا این شئ به متد getName دسترسی داشته باشد. برای اینکار در خط آخر از متد setPrototypeOf استفاده کردیم و این کار رو انجام دادیم. حالا اگر obj رو در Console چاپ کنید بصورت زیر خواهد بود:

همونطور که میبینید متد getName شئ obj قرار داده شده و میتونین از اون استفاده کنید. پس اگر obj.getName() رو استفاده کنید، مقدار Mohammad برگشت داده خواهد شد.

متد Reflect.get

با استفاده از این متد جدید میتونین مقدار ویژگی مورد نظرتون رو بدست بیارید. این کار تقریبا معادل با target[propertyKey] می باشد. این متد سه ورودی رو دریافت میکنه و ورودی سوم اون اختیاری است. ورودی اول شئ مورد نظر رو مشخص میکنه و ورودی دوم هم باید اون ویژگی که میخواید مقدارش رو بدست بیارید، قرار بدین. اگر ورودی اول شئ نباشد یک ارور نمایش داده میشه. مثالهای زیر رو در نظر بگیرید:

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

متد Reflect.set

این متد نیز جدید بوده و برعکس متد بالا، یک ویژگی جدید با مقدار مورد نظر رو به شئ اضافه میکند. این متد 4 ورودی رو دریافت میکنه و ورودی چهارم اون اختیاری می باشد. ورودی اول و دوم همانند متد بالا و ورودی سوم، مقدار مورد نظر برای ویژگی می باشد. در صورت موفقیت در اضافه شدن ویژگی true و در غیر این صورت false نمایش داده می شود. اگر ورودی اول شئ نباشد یک Error نمایش داده میشه. مثالهای زیر رو ببینید:

به همین راحتی میتونیم با این متد کار کنیم.

متد Reflect.ownKeys

این متد جدید آرایه ای از ویژگی های شئ مورد نظرتون رو برگشت میده. این متد ترکیبی از متدهای Object.getOwnPropertyNames و Object.getOwnPropertySymbols می باشد. پس یعنی متد ownKeys همه ویژگی ها چه عادی و چه بصورت Symbol رو در اختیار ما قرار می دهد. مثال زیر رو در نظر بگیرید:

میبینید که از سه متد استفاده کردیم تا تفاوت اونا رو بهتر متوجه بشیم. اگر خروجی رو ببینیم بصورت زیر می باشد:

همونطور که میبنید نتیجه متد ownKeys برابر با ترکیب دو متد دیگر می باشد.

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

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

یا علی

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

نیاز به لاگین

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