JavaScript Obyekt Aksessorlari (Get va Set)
Getter-lar va setter-lar sizga obyekt aksessorlarini (Computed Properties — Hisoblanadigan xususiyatlar) aniqlash imkonini beradi.
JavaScript Getter (get kalit so'zi)
Getter xususiyat qiymatini olish (o'qish) uchun funksiyani xususiyat kabi chaqirish imkonini beradi.
Misol
js
const person = {
firstName: 'John',
lastName: 'Doe',
language: 'en',
get lang() {
return this.language.toUpperCase()
}
}
// Getter yordamida ma'lumotni olish:
console.log(person.lang) // "EN" chiqadiJavaScript Setter (set kalit so'zi)
Setter xususiyatga qiymat berish (yozish) uchun ishlatiladi va berilgan qiymatni qayta ishlash imkonini beradi.
Misol
js
const person = {
firstName: 'John',
lastName: 'Doe',
language: '',
set lang(lang) {
this.language = lang.toUpperCase()
}
}
// Setter orqali qiymat berish:
person.lang = 'uz'
console.log(person.language) // "UZ" chiqadiFunksiya yoki Getter? Farqi nimada?
Quyidagi ikki misolni solishtiring:
Metod (Funksiya) usuli
js
const person = {
firstName: 'John',
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
person.fullName() // Funksiya kabi chaqiriladi ()Getter usuli
js
const person = {
firstName: 'John',
get fullName() {
return this.firstName + ' ' + this.lastName
}
}
person.fullName // Xususiyat kabi murojaat qilinadiAsosiy farq: Getter oddiyroq sintaksis taqdim etadi va obyekt xususiyatiga murojaat qilishni funksiya chaqirishdan ko'ra qulayroq qiladi.
Nima uchun Getter va Setter-dan foydalanish kerak?
- Sintaksisni soddalashtiradi.
- Xususiyatlar va metodlar uchun bir xil sintaksisga imkon beradi.
- Ma'lumotlar sifatini (Data Quality) ta'minlaydi (qiymatni saqlashdan oldin tekshirish yoki o'zgartirish).
- "Parda ortida" ishlarni bajarish (masalan, log yuritish yoki hisoblashlar) uchun foydali.
Object.defineProperty() yordamida aksessorlarni qo'shish
Mavjud obyektga Object.defineProperty() metodi orqali ham getter va setter-larni qo'shish mumkin.
Hisoblagich (Counter) Misoli
js
const obj = { counter: 0 }
Object.defineProperty(obj, 'reset', {
get: function () {
this.counter = 0
}
})
Object.defineProperty(obj, 'increment', {
get: function () {
this.counter++
}
})
Object.defineProperty(obj, 'add', {
set: function (value) {
this.counter += value
}
})
// Ishlatish:
obj.reset
obj.add = 5
obj.increment
console.log(obj.counter) // 6