Sobes.tech
Middle

Kā padarīt objekta īpašību nemainīgu?

sobes.tech AI

Atbilde no AI

Obligācijas īpašības neizmaināmības nodrošināšanai ir vairākas metodes:

  1. Izmantojot Object.defineProperty():

    Šī metode ļauj definēt vai mainīt objekta īpašības ar detalizētāku kontroli. Lai izveidotu neizmaināmu īpašību, jāiestata īpašības apraksts ar writable: false:

    const obj = {};
    Object.defineProperty(obj, 'myProperty', {
      value: 'Neizmaināma vērtība',
      writable: false, // Padara īpašību neizmaināmu
      enumerable: true, // Īpašība būs redzama iterācijā
      configurable: true // Īpašību var dzēst vai mainīt tās aprakstu
    });
    
    // Mēģinājums mainīt vērtību tiks ignorēts neitrālā režīmā
    // un izraisīs kļūdu TypeError stingrā režīmā
    obj.myProperty = 'Jauna vērtība';
    console.log(obj.myProperty); // Izvadīs "Neizmaināma vērtība"
    

    Ja iestatīsiet configurable: false, īpašība nevar tikt dzēsta vai mainīta tās apraksts:

    const obj2 = {};
    Object.defineProperty(obj2, 'myProperty', {
      value: 'Neizmaināma un viegli dzēšama',
      writable: false,
      enumerable: true,
      configurable: false // Padara īpašības aprakstu neizmaināmu
    });
    
    // Mēģinājums mainīt vērtību
    obj2.myProperty = 'Jauna vērtība';
    console.log(obj2.myProperty); // Izvadīs "Neizmaināma un viegli dzēšama"
    
    // Mēģinājums dzēst īpašību
    delete obj2.myProperty;
    console.log(obj2.myProperty); // Izvadīs "Neizmaināma un viegli dzēšama"
    
  2. Izmantojot Object.freeze():

    Šis metodes padara objektu "aizsaldu". Tas nozīmē, ka nevar pievienot jaunas īpašības, dzēst esošās, mainīt esošo īpašību vērtības (ieskaitot to sarakstu un konfigurāciju), kā arī mainīt objekta prototipu:

    const obj = {
      myProperty: 'Neizmaināma vērtība'
    };
    
    Object.freeze(obj);
    
    // Mēģinājums mainīt vērtību
    obj.myProperty = 'Jauna vērtība';
    console.log(obj.myProperty); // Izvadīs "Neizmaināma vērtība"
    
    // Mēģinājums pievienot jaunu īpašību
    obj.newProperty = 'Jauna';
    console.log(obj.newProperty); // Izvadīs `undefined`
    
    // Mēģinājums dzēst īpašību
    delete obj.myProperty;
    console.log(obj.myProperty); // Izvadīs "Neizmaināma vērtība"
    

    Ir svarīgi atzīmēt, ka Object.freeze() ir virsmas līmenī. Ja īpašība ir cits objekts, tas netiks aizsalts:

  3. Izmantojot const ar objektiem:

    Atslēgvārds const padara atsauci uz objektu neizmaināmu, bet ne pats objekts. Jūs nevarēsiet pārrakstīt atsauci, bet varēsiet mainīt objekta īpašības:

    const obj = {
      myProperty: 'Sākotnējā vērtība'
    };
    
    // Var mainīt īpašības vērtību
    obj.myProperty = 'Jauna vērtība';
    console.log(obj.myProperty); // Izvadīs "Jauna vērtība"
    
    // Nevar pārrakstīt atsauci
    // obj = { citaProperty: 'Cita' }; // Izraisīs TypeError
    

Salīdzinājuma tabula metožu:

Metode Ko dara neizmaināmu? Neizmainības līmenis
Object.defineProperty() Viena īpašība Apraksta definīcija
Object.freeze() Vesels objekts Virsmas līmenis
const Atsauce uz objektu Maināms mainīgais

Izvēle ir atkarīga no tā, cik detalizētu neizmainību vēlaties. Vienai īpašībai piemērots Object.defineProperty(), visam objektam - Object.freeze(). Lai novērstu atsauces pārrakstīšanu, izmantojiet const.