February 22, 2023

JavaScriptda reflection va Reflect API

Reflection nima?

Dasturlashda reflection - bu dasturning o'zgaruvchilarni, object property va methodlarini boshqarish qobilyati. Ho'sh javascriptda reflection bormi? ES6 gacha javascriptda reflection deb atasak bo'ladigan methodlar bo'lishiga qaramay reflection mavjud emas deyilar edi. Aslida esa Object.getOwnPropertyDescriptor(), Object.keys(), Array.isArray() bular klassik reflection xususiyatlardir.

Reflect

ES6 bizga method va contstructor objectlarini chaqirish, propertylarn get va set qilish, ularni boshqarish imkonini beruvchi yangi Reflect global objectini taqdim etdi. Reflect constructor emas, shu sabab uni new bilan chaqirib bo'lmaydi va o'zini function sifatida ham ishlata olmaymiz. Reflect ning JSON va Math kabi hamma propertylari static hisoblanadi.

Odatda biz constructorni chaqirish uchun quyidagi yo'ldan foydalanamiz.

 const myInstance = new Model(args)

Reflect api orqali esa constructorlar quyidagi kabi chaqiriladi.

const myInstance = Reflect.constructor(Model,args)

quyida esa Reflectning ba'zi bir methodlarini ko'rib chiqamiz.

// delete object.property

Reflect.deleteProperty(object,"property")

//  object.property && array[index]

Reflect.get(object,"property")
Reflect.get(array,index)

//  object.property = value && array[index] = value

Reflect.set(object,"property",value)
Reflect.set(array,index,value)

// Object.keys(obj)

Reflect.ownKeys(obj) //Object.keys dan farqi bu symbollarni ham qaytaradi

Reflect ning boshqa static metholarini bu link orqali o'rganib chiqishingiz mumkin. Reflect asosan Proxy handlerning traplarida ishlatiladi va ishimizni oson qiladi.

const userProxy = new Proxy(user, {
  set(target,property,val){
    if(isAdmin){
      Reflect.set(target,property,value)
    }else{
      throw new Error("Ruxsat mavjud emas!")
    }
  }
})