js Proxy
در جاوااسکریپت، Proxy ابزاری قدرتمند است که برای کنترل و تغییر رفتار اشیا استفاده میشود.
با استفاده از Proxy میتوان عملیاتهایی مثل خواندن، نوشتن، حذف یا بررسی ویژگیهای یک شیء را کنترل کرد.
🔹 ساخت یک Proxy ساده
Proxy با دو بخش ساخته میشود:
-
شیء اصلی (target)
-
شیء کنترلکننده (handler)
const user = { name: "Ali", age: 25 };
const proxy = new Proxy(user, {
get(target, property) {
return `ویژگی ${property}: ${target[property]}`;
}
});
console.log(proxy.name);
📌 خروجی:
ویژگی name: Ali
در این مثال، وقتی proxy.name
فراخوانی میشود، بهجای مقدار مستقیم، خروجی سفارشی برمیگردد.
🔹 متدهای Trap در Proxy
Handler شامل توابعی به نام Trap است که رفتارهای مختلف شیء را کنترل میکنند، مثل:
Trap | توضیح |
---|---|
get |
هنگام خواندن ویژگی فراخوانی میشود. |
set |
هنگام تنظیم مقدار ویژگی فراخوانی میشود. |
deleteProperty |
هنگام حذف ویژگی اجرا میشود. |
has |
در زمان استفاده از in فراخوانی میشود. |
🔹 مثال با Trap set
const person = {};
const proxy = new Proxy(person, {
set(target, property, value) {
if (property === "age" && value < 0) {
console.log("سن نمیتواند منفی باشد!");
return false;
}
target[property] = value;
return true;
}
});
proxy.age = -5; // ❌ هشدار
proxy.age = 30; // ✅ تنظیم موفق
📌 خروجی:
سن نمیتواند منفی باشد!
🔹 حذف ویژگی با کنترل
const data = { secret: "1234" };
const proxy = new Proxy(data, {
deleteProperty(target, prop) {
if (prop === "secret") {
console.log("اجازه حذف ویژگی محرمانه را ندارید!");
return false;
}
delete target[prop];
return true;
}
});
delete proxy.secret; // ❌ غیرمجاز
📌 خروجی:
اجازه حذف ویژگی محرمانه را ندارید!
🔹 کاربردهای متداول Proxy
-
اعتبارسنجی مقادیر قبل از ذخیره
-
جلوگیری از حذف یا ویرایش دادههای خاص
-
ایجاد لاگ هنگام تغییر مقادیر
-
ساخت APIهای واکنشی (مثل Vue.js)
✅ نکته:
-
Proxy فقط رفتار دسترسی به شیء را تغییر میدهد، نه ساختار آن.
-
برای حذف کنترلها میتوان از
Reflect
استفاده کرد. -
از ES6 معرفی شده و در تمام مرورگرهای مدرن پشتیبانی میشود.