بررسی Reflect ها در جاوا اسکریپت

این تصویر عنوانی ندارد باتشکر !سلام . امروز میخوایم یه مبحث خیلی جذاب رو بررسی کنیم. Reflect Api در جاوا اسکریپت !ابتدا به این موضوع میپردازیم که اصلا این بنده خدا چی هست ؟بصورت کلی رفلکت یک شی داخلی ( built-in object ) هست که روش ها و متدهایی رو برای عملیات جاوا اسکریپت قابل رهگیری(interceptable) ارائه می ده.مثل روش های کنترل کننده پروکسی . Reflect یک شی تابع نیست، بنابراین قابل ساخت(constructible) نیست.بر خلاف بسیاری از اشیاء سراسری(global)، Reflect یک سازنده نیست. شما نمی تونید اون رو با یک عملگر جدید استفاده کنید یا شی Reflect رو به عنوان یک تابع فراخوانی کنید. تمام خصوصیات و متدهای Reflect ثابت هستند (دقیقاً مانند شیء Math).اندر مشکلات jsبررسی چند متد :1- اولین متد ‌:applyReflect.apply(target, thisArgument, argumentsList)استفاده ی اون هم به این شکل هست . برای مثال :)console.log(Reflect.apply(&quot&quot.charAt, 'mahdiar', [4]));در این مثال ابتدا charAt رو فراخونی کردیم بعدش به عنوان خود رشته "mahdiar" و به عنوان argument , چهار رو پاس دادیم و نتیجه همون نتیجه عادی هستاپلای فانکشن هدف رو با آرگومان هایی که توسط پارامتر argumentsList مشخص شده فراخوانی می کنه. این هم یه مثال دیگه برای اپلای : console.log(Reflect.apply(Math.pow, undefined, [3,4]))منتها مثال دوم کمی تفاوت داره , چون Math.pow دوتا عدد قبول میکنه خودش Argument نداره اون بخش رو undefined قرار میدیم2- متد definePropertyاین متد هم خیلی پرکاربرد هست و بصورت خلاصه برای این هست که یک پراپرتی رو بعد از ساخت یک شی بهش پاس بدیم (دقیقا مثل Object.defineProperty با این تفاوت که یک مقدار Boolean برمیگردونه)const mahdiar= {};if (Reflect.defineProperty(mahdiar, 'age', { value: 14})) { console.log('age created!');} else { console.log('problem creating age');}console.log(mahdiar.age);// expected output: 143- متد deletePropertyمتد Reflect.deleteProperty هم یک تارگت و یک کلید پراپرتی قبول میکنه و اون رو خیلی شیک و مجلسی پاک میکنه (خیلی نیاز به مثال نداره , کاملا واضحه :) )4- متد getمتد Reflect.get هم یک تارگت و کلید پراپرتی میگیره و Value اون پراپرتی رو برمیگردونهاین هم مثالش :const object1 = {x: 1};console.log(Reflect.get(object1, 'x'));const array1 = ['zero', 'one'];console.log(Reflect.get(array1, 1));4- متد ownKeysمتد Reflect.ownKeys هم یک ارایه از کلید های target رو برمیگردونه برای مثال :const mahdiar = { hobby: 'Sleeeeeeeeeeeeeeeeep', favoriteFood: 'Kebab'};console.log(Reflect.ownKeys(mahdiar));// expected output: Array ["hobby", "favoriteFood"]5- متد hasمتد Reflect.has هم مثل موارد قبلی یه تارگت و یه کلید میگیره و Boolean برمیگردونه. دوشواری نداره که :)const pride = {nickName: "عمر دست خداست پراید وسیلست"};console.log(Reflect.has(pride, 'nickName'));// trueconsole.log(Reflect.has(pride, 'age'));// false6- متد constructمتد Reflect.construct مثل عملگر new عمل می کنه، اما به عنوان یک تابع. همچنین گزینه اضافه شده برای تعیین Prototype متفاوت رو می ده.function calc(a, b, c) { this.sum = a + b + c;}const args = [1, 2, 3];const object2 = Reflect.construct(func1, args);7- متد setمتد Reflect.set هم سه تا مقدار قبول میکنه . ابتدا هدف (Target) بعد نام کلیدی که میخواین برای Property بزارین و سوم مقدار اون پراپرتی و اون پراپرتی رو به تارگت اضافه میکنهconst object1 = {};Reflect.set(object1, 'test', 42);همینطور که در مثال میبینید با استفاده از این متد پراپرتی test رو با مقدار 42 به object1 اضافه کردیماینا بخشی از متدهای Reflect بود اگر تمایل داشتین خیلی کامل و جامع به بررسیش بپردازین این لینکخیلی مفید هست. همچنین اگر این نوشته براتون مفید بوده لطفا نظرتون رو بگید و این نوشته رو بپسندید :)))