Skip to content

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

js
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 : true bo'lsa, qiymatni o'zgartirsa bo'ladi.
  • enumerable : true bo'lsa, xususiyatni tsikllarda (for...in) ko'rish mumkin.
  • configurable : true bo'lsa, xususiyatni o'chirish yoki atributlarini qayta sozlash mumkin.

Misol: Xususiyatni "faqat o'qish" (Read-only) qilish

js
Object.defineProperty(person, 'language', { writable: false })

Misol: Xususiyatni tsikllardan yashirish

js
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

js
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.