JavaScript Proxy API
Proxy — bu biror bir obyektni "o'rab oluvchi" va uning ustida bajariladigan amallarni (o'qish, yozish, o'chirish va h.k.) tutib olish (intercept) hamda o'zgartirish imkonini beruvchi maxsus obyektdir.
"Ishonchli vakil" (Middleman)
Proxy obyekt va sizning kodingiz o'rtasida turuvchi "o'rtakash"ga o'xshaydi. Kimdir obyektga murojaat qilganida, birinchi bo'lib Proxy ishga tushadi.
Proxy qanday yaratiladi?
Proxy yaratish uchun ikkita narsa kerak:
- Target: O'ralishi kerak bo'lgan asl obyekt.
- Handler: "Tuzoqlar" (traps) obyekti. Bu yerda biz qaysi amallarni tutib olishimizni belgilaymiz.
const proxy = new Proxy(target, handler)Misol (O'qishni tutib olish):
const user = { name: 'Ali', age: 25 }
const proxy = new Proxy(user, {
get(target, prop) {
console.log(`${prop} xususiyati o'qilmoqda...`)
return target[prop]
}
})
console.log(proxy.name) // Ali (va konsolda xabar chiqadi)Proxy "Tuzoqlari" (Traps)
Proxy orqali deyarli barcha amallarni tutib olish mumkin:
get: Xususiyat o'qilganda.set: Xususiyat o'zgartirilganda.has:inoperatori ishlatilganda.deleteProperty: Xususiyat o'chirilganda.apply: Funksiya sifatida chaqirilganda.
Amaliy misollar
1. Ma'lumotlarni tekshirish (Validation)
Obyektga noto'g'ri ma'lumot yozilishini Proxy orqali taqiqlash mumkin.
const userProxy = new Proxy(
{},
{
set(target, prop, value) {
if (prop === 'age' && value < 0) {
throw new Error("Yosh manfiy bo'lishi mumkin emas!")
}
target[prop] = value
return true
}
}
)
userProxy.age = -5 // Xatolik beradi!2. "Virtual" xususiyatlar
Haqiqatda mavjud bo'lmagan, lekin so'ralganda generatsiya qilinadigan ma'lumotlar yaratish.
const person = { first: 'Ali', last: 'Valiyev' }
const virtualProxy = new Proxy(person, {
get(target, prop) {
if (prop === 'fullName') {
return `${target.first} ${target.last}`
}
return target[prop]
}
})
console.log(virtualProxy.fullName) // Ali ValiyevNega Proxy kerak?
- Logging: Har bir amalni nazorat qilish va yozib borish.
- Xavfsizlik: Obyektning ba'zi qismlarini yashirish yoki faqat o'qish uchun ochiq qilish.
- Avtomatlashtirish: Ma'lumot o'zgarganda boshqa amallarni (masalan, UI yangilash) avtomatik bajarish.
Muhim qoida
Proxy ichida amallarni asl obyektga yo'naltirishda har doim Reflect API-dan foydalanish tavsiya etiladi. Bu kodning standartga muvofiq va xatosiz ishlashini ta'minlaydi.
Batafsil ma'lumot
Proxy "tuzoqlarining" to'liq ro'yxati bilan tanishish uchun ma'lumotnomaga o'ting: Metadasturlash Ma'lumotnomasi »
