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

این تصویر عنوانی ندارد باتشکر !
این تصویر عنوانی ندارد باتشکر !


سلام . امروز میخوایم یه مبحث خیلی جذاب رو بررسی کنیم. Reflect Api در جاوا اسکریپت !

ابتدا به این موضوع میپردازیم که اصلا این بنده خدا چی هست ؟

بصورت کلی رفلکت یک شی داخلی ( built-in object ) هست که روش ها و متدهایی رو برای عملیات جاوا اسکریپت قابل رهگیری(interceptable) ارائه می ده.مثل روش های کنترل کننده پروکسی . Reflect یک شی تابع نیست، بنابراین قابل ساخت(constructible) نیست.

بر خلاف بسیاری از اشیاء سراسری(global)، Reflect یک سازنده نیست. شما نمی تونید اون رو با یک عملگر جدید استفاده کنید یا شی Reflect رو به عنوان یک تابع فراخوانی کنید. تمام خصوصیات و متدهای Reflect ثابت هستند (دقیقاً مانند شیء Math).

اندر مشکلات js
اندر مشکلات js

بررسی چند متد :

1- اولین متد ‌:apply

Reflect.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: 14


3- متد 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'));
// true
console.log(Reflect.has(pride, 'age'));
// false


6- متد 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 بود اگر تمایل داشتین خیلی کامل و جامع به بررسیش بپردازین این لینک

خیلی مفید هست.


همچنین اگر این نوشته براتون مفید بوده لطفا نظرتون رو بگید و این نوشته رو بپسندید :)))