Obyekt xususiyatini qanday o'zgarmas qilish mumkin?
sobes.tech AI
AIdan javob
Obyektning xususiyatini o'zgarmas qilishning bir nechta usullari mavjud:
-
Object.defineProperty()dan foydalanish:Bu metod obyektning xususiyatlarini yanada aniqroq nazorat bilan belgilash yoki o'zgartirish imkonini beradi. O'zgarmas xususiyat yaratish uchun, xususiyatning tavsifchisini
writable: falseqilib o'rnatish kerak.const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'O'zgarmas qiymat', writable: false, // Xususiyatni o'zgarmas qiladi enumerable: true, // Xususiyat takrorlashda ko'rinadi configurable: true // Xususiyatni o'chirish yoki tavsifchisini o'zgartirish mumkin }); // Qiymatni o'zgartirishga urinish, non-strict rejimda e'tiborsiz qoldiriladi // va strict rejimda TypeError xatosi chiqaradi obj.myProperty = 'Yangi qiymat'; console.log(obj.myProperty); // "O'zgarmas qiymat" chiqaradiAgar
configurable: falseqilib o'rnatilsa, xususiyatni o'chirish yoki tavsifchisini o'zgartirish mumkin emas (shu jumladanwritable).const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'O'zgarmas va oson o'chirilmaydigan', writable: false, enumerable: true, configurable: false // Tavsifchisini o'zgarmas qiladi }); // Qiymatni o'zgartirishga urinish obj2.myProperty = 'Yangi qiymat'; console.log(obj2.myProperty); // "O'zgarmas va oson o'chirilmaydigan" chiqaradi // Xususiyatni o'chirishga urinish delete obj2.myProperty; console.log(obj2.myProperty); // "O'zgarmas va oson o'chirilmaydigan" chiqaradi -
Object.freeze()dan foydalanish:Bu metod obyektni "muzlatadi". Bu shuni anglatadiki, yangi xususiyatlar qo'shish, mavjudlarini o'chirish, qiymatlarini o'zgartirish (shu jumladan, ularning hisoblanishi va konfiguratsiyasi) va obyektning prototipini o'zgartirish mumkin emas.
const obj = { myProperty: 'O'zgarmas qiymat' }; Object.freeze(obj); // Qiymatni o'zgartirishga urinish obj.myProperty = 'Yangi qiymat'; console.log(obj.myProperty); // "O'zgarmas qiymat" chiqaradi // Yangi xususiyat qo'shishga urinish obj.newProperty = 'Yangi'; console.log(obj.newProperty); // undefined // Xususiyatni o'chirishga urinish delete obj.myProperty; console.log(obj.myProperty); // "O'zgarmas qiymat" chiqaradiObject.freeze()yuzaki amalga oshiriladi. Agar obyektning xususiyati boshqa obyekt bo'lsa, u holda ichki obyekt muzlatilmaydi. -
constdan foydalanish:constkalit so'zi obyektga bo'lgan havolani o'zgarmas qiladi, lekin obyekt o'zi emas. Siz o'zgaruvchini boshqa obyektga tayinlay olmaysiz, ammo obyektning xususiyatlarini o'zgartirishingiz mumkin.const obj = { myProperty: 'Boshlang' qiymat' }; // Xususiyat qiymatini o'zgartirish mumkin obj.myProperty = 'Yangi qiymat'; console.log(obj.myProperty); // "Yangi qiymat" chiqaradi // O'zgaruvchini boshqa obyektga tayinlash mumkin emas // obj = { boshqaXususiyat: 'Boshqa' }; // TypeError chiqaradi
Usullarning taqqoslanishi:
| Usul | Nima o'zgarmas qiladi? | O'zgarmaslik darajasi |
|---|---|---|
Object.defineProperty() |
Bir xususiyatga | Tavsifchi orqali belgilangan |
Object.freeze() |
Butun obyekt | Yuzaki |
const |
Ob'ektga bo'lgan havola | O'zgaruvchi |
Usul tanlovi, qancha granular bo'lishi kerakligiga bog'liq. Bir xususiyat uchun Object.defineProperty(), butun obyekt uchun Object.freeze(). Havolani qayta tayinlashni oldini olish uchun const ishlatiladi.