Sobes.tech
Middle

Чӣ гуна хосияти объектро беэътибор кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Чӣ гуна метавон хосияти объектро ғайрифаъол кард, метавонад бо чанд роҳ анҷом дода шавад:

  1. Истифодаи Object.defineProperty():

    Ин усул имкон медиҳад, ки хосиятҳои объект бо назорати бештар муайян ё тағир дода шаванд. Барои сохтани хосияти ғайрифаъол, бояд дескрипторро бо writable: false танзим кард.

    const obj = {};
    Object.defineProperty(obj, 'myProperty', {
      value: 'Қимати ғайрифаъол',
      writable: false, // Мекунад хосияти ғайрифаъол
      enumerable: true, // Хосият дар давоми ислоҳот дида мешавад
      configurable: true // Хосият метавонад тоза ё тағир дода шавад
    });
    
    // кӯшиши тағир додани қимат дар режими ғайристрогӣ нодида гирифта мешавад
    // ва дар режими қатъӣ хатогӣ TypeError меорад
    obj.myProperty = 'Қимати нав';
    console.log(obj.myProperty); // Натиҷа "Қимати ғайрифаъол"
    

    Агар configurable: false гузошта шавад, хосият наметавонад тоза ё тағир дода шавад (аз ҷумла writable).

    const obj2 = {};
    Object.defineProperty(obj2, 'myProperty', {
      value: 'Қимати ғайрифаъол ва душвор тоза',
      writable: false,
      enumerable: true,
      configurable: false // Дескрипторро ғайрифаъол мекунад
    });
    
    // кӯшиши тағир додани қимат
    obj2.myProperty = 'Қимати нав';
    console.log(obj2.myProperty); // Натиҷа "Қимати ғайрифаъол ва душвор тоза"
    
    // кӯшиши тоза кардани хосият
    delete obj2.myProperty;
    console.log(obj2.myProperty); // Натиҷа "Қимати ғайрифаъол ва душвор тоза"
    
  2. Истифодаи Object.freeze():

    Ин усул объекти "мўйсаф" мекунад. Ин маъно дорад, ки илова кардани хосиятҳои нав, тоза кардани мавҷудбударо, тағир додани арзишҳои мавҷудбуда (аз ҷумла enumeration ва конфигуратсия) ва тағир додани прототипи объект манъ аст.

    const obj = {
      myProperty: 'Қимати ғайрифаъол'
    };
    
    Object.freeze(obj);
    
    // кӯшиши тағир додани қимат
    obj.myProperty = 'Қимати нав';
    console.log(obj.myProperty); // Натиҷа "Қимати ғайрифаъол"
    
    // кӯшиши илова кардани хосияти нав
    obj.newProperty = 'Нав';
    console.log(obj.newProperty); // undefined
    
    // кӯшиши тоза кардани хосият
    delete obj.myProperty;
    console.log(obj.myProperty); // Натиҷа "Қимати ғайрифаъол"
    

    Муҳим аст, ки Object.freeze() сатҳӣ аст. Агар хосияти объект дигар объект бошад, он объект дарунӣ ҳамзамон мўйсаф намешавад.

  3. Истифодаи const барои тағйирёбандаҳои дорои объект:

    Калидвожа const пайвандро бо объект ғайрифаъол мекунад, аммо на худи объектро. Шумо наметавонед тағйир додани пайвандро ба объект дигар, аммо метавонед хосиятҳои объектро тағир диҳед.

    const obj = {
      myProperty: 'Арзиш оғозӣ'
    };
    
    // Мумкин аст арзиши хосиятро тағир додан
    obj.myProperty = 'Арзиш нав';
    console.log(obj.myProperty); // "Арзиш нав"
    
    // Нагузоред пайвандро тағир додан
    // obj = { дигарХосият: 'Дигар' }; // Хатогӣ TypeError
    

Мувофиқи усулҳо муқоиса:

Усул Чӣ мекунад ғайрифаъол? Сатҳи ғайрифаъолият
Object.defineProperty() Як хосияти муайян Бо дескриптор муайян мешавад
Object.freeze() Ҳамаи объект Сатҳӣ
const Пайванд ба объект Вариаблӣ

Интихоби усул вобаста аст, ки чӣ қадар дақиқ бояд ғайрифаъолият бошад. Барои як хосият мувофиқ аст Object.defineProperty(), барои тамоми объект - Object.freeze(). Барои пешгирӣ аз тағир додани пайванд, истифода мешавад const.