Sobes.tech
Middle

Obyekt xususiyatini qanday o'zgarmas qilish mumkin?

sobes.tech AI

AIdan javob

Obyektning xususiyatini o'zgarmas qilishning bir nechta usullari mavjud:

  1. 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: false qilib 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" chiqaradi
    

    Agar configurable: false qilib o'rnatilsa, xususiyatni o'chirish yoki tavsifchisini o'zgartirish mumkin emas (shu jumladan writable).

    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
    
  2. 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" chiqaradi
    

    Object.freeze() yuzaki amalga oshiriladi. Agar obyektning xususiyati boshqa obyekt bo'lsa, u holda ichki obyekt muzlatilmaydi.

  3. const dan foydalanish:

    const kalit 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.