یه برنامه نویس .Net و JS
بررسی Reflect ها در جاوا اسکریپت
سلام . امروز میخوایم یه مبحث خیلی جذاب رو بررسی کنیم. Reflect Api در جاوا اسکریپت !
ابتدا به این موضوع میپردازیم که اصلا این بنده خدا چی هست ؟
بصورت کلی رفلکت یک شی داخلی ( built-in object ) هست که روش ها و متدهایی رو برای عملیات جاوا اسکریپت قابل رهگیری(interceptable) ارائه می ده.مثل روش های کنترل کننده پروکسی . Reflect یک شی تابع نیست، بنابراین قابل ساخت(constructible) نیست.
بر خلاف بسیاری از اشیاء سراسری(global)، Reflect یک سازنده نیست. شما نمی تونید اون رو با یک عملگر جدید استفاده کنید یا شی Reflect رو به عنوان یک تابع فراخوانی کنید. تمام خصوصیات و متدهای Reflect ثابت هستند (دقیقاً مانند شیء Math).
بررسی چند متد :
1- اولین متد :apply
Reflect.apply(target, thisArgument, argumentsList)
استفاده ی اون هم به این شکل هست . برای مثال :)
console.log(Reflect.apply("".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 بود اگر تمایل داشتین خیلی کامل و جامع به بررسیش بپردازین این لینک
خیلی مفید هست.
همچنین اگر این نوشته براتون مفید بوده لطفا نظرتون رو بگید و این نوشته رو بپسندید :)))
مطلبی دیگر از این انتشارات
امان از امیرعباس مشروطه خواه! (تجربه ی من از اسکیزوفرنی، قسمت نمیدونم چندم.)
مطلبی دیگر از این انتشارات
خواسته ما پس از مرگ برای کسی اهیمت دارد ؟
مطلبی دیگر از این انتشارات
استفاده از Currying در JavaScript