JavaScript Obyektlarni Boshqarish
JavaScript obyekt xususiyatlarini (property) batafsil boshqarish, ularning metama'lumotlarini o'zgartirish va xavfsizligini ta'minlash uchun maxsus metodlarni taqdim etadi.
Xususiyatlarni boshqarish metodlari
Asosiy metodlar
Object.defineProperty(object, property, descriptor)— Obyekt xususiyatini qo'shish yoki o'zgartirish.Object.defineProperties(object, descriptors)— Bir nechta xususiyatlarni qo'shish yoki o'zgartirish.Object.getOwnPropertyDescriptor(object, property)— Bitta xususiyat deskriptorini olish.Object.getOwnPropertyDescriptors(object)— Barcha xususiyat deskriptorlarini olish.Object.getOwnPropertyNames(object)— Barcha xususiyat nomlarini massiv sifatida qaytaradi.Object.getPrototypeOf(object)— Obyekt prototipini olish.
Object.defineProperty()
Object.defineProperty() metodi yordamida quyidagilarni bajarish mumkin:
- Obyektga yangi xususiyat qo'shish.
- Xususiyat qiymatini o'zgartirish.
- Xususiyat metama'lumotlarini (atributlarini) o'zgartirish.
- Getter va setter-larni boshqarish.
Misol: Yangi xususiyat qo'shish
const person = { firstName: 'John', lastName: 'Doe' }
// "year" nomli yangi xususiyat qo'shish
Object.defineProperty(person, 'year', { value: '2024' })Xususiyat atributlari (Property Attributes)
Har bir xususiyat nafaqat qiymatga, balki uning xulq-atvorini belgilaydigan maxfiy atributlarga ham ega:
- writable :
truebo'lsa, qiymatni o'zgartirsa bo'ladi. - enumerable :
truebo'lsa, xususiyatni tsikllarda (for...in) ko'rish mumkin. - configurable :
truebo'lsa, xususiyatni o'chirish yoki atributlarini qayta sozlash mumkin.
Misol: Xususiyatni "faqat o'qish" (Read-only) qilish
Object.defineProperty(person, 'language', { writable: false })Misol: Xususiyatni tsikllardan yashirish
Object.defineProperty(person, 'language', { enumerable: false })Object.getOwnPropertyNames()
Object.getOwnPropertyNames() metodi obyektning barcha xususiyatlarini (hatto ular sanalmaydigan — non-enumerable bo'lsa ham) ro'yxat ko'rinishida qaytaradi.
Misol
const person = { firstName: 'Ali', lastName: 'Valiyev' }
Object.defineProperty(person, 'id', { value: 1, enumerable: false })
// Barcha xususiyatlarni olish
Object.getOwnPropertyNames(person) // ["firstName", "lastName", "id"]Farqi nimada?
Object.keys()metodi faqat sanaladigan (enumerable) xususiyatlarni qaytaradi.Object.getOwnPropertyNames()esa barcha xususiyatlarni (hatto yashirilganlarini ham) qaytaradi.
Prototip xususiyatlari
JavaScript obyektlari o'z prototipining xususiyatlarini meros qilib oladi. delete kalit so'zi meros qilib olingan xususiyatlarni o'chirmaydi, lekin agar siz prototipning o'zidan xususiyatni o'chirsangiz, bu o'sha prototipdan foydalanadigan barcha obyektlarga ta'sir qiladi.
