Sobes.tech
Middle

Hoe maak je een eigenschap van een object onveranderlijk?

sobes.tech AI

Antwoord van AI

Je kunt een eigenschap van een object op verschillende manieren onveranderlijk maken:

  1. Gebruik van Object.defineProperty():

    Deze methode stelt je in staat om de eigenschappen van een object te definiëren of te wijzigen met meer granulariteit. Om een onveranderlijke eigenschap te creëren, moet je de descriptor van de eigenschap instellen op writable: false.

    const obj = {};
    Object.defineProperty(obj, 'myProperty', {
      value: 'Onveranderlijke waarde',
      writable: false, // Maakt de eigenschap onveranderlijk
      enumerable: true, // De eigenschap is zichtbaar tijdens iteratie
      configurable: true // De eigenschap kan worden verwijderd of de descriptor kan worden gewijzigd
    });
    
    // Poging om de waarde te wijzigen wordt genegeerd in niet-strict modus
    // en veroorzaakt een TypeError in strict modus
    obj.myProperty = 'Nieuwe waarde';
    console.log(obj.myProperty); // Toont "Onveranderlijke waarde"
    

    Als configurable: false wordt ingesteld, kan de eigenschap niet worden verwijderd of de descriptor worden gewijzigd (inclusief writable).

    const obj2 = {};
    Object.defineProperty(obj2, 'myProperty', {
      value: 'Onveranderlijk en niet gemakkelijk te verwijderen',
      writable: false,
      enumerable: true,
      configurable: false // Maakt de descriptor van de eigenschap onveranderlijk
    });
    
    // Poging om de waarde te wijzigen
    obj2.myProperty = 'Nieuwe waarde';
    console.log(obj2.myProperty); // Toont "Onveranderlijk en niet gemakkelijk te verwijderen"
    
    // Poging om de eigenschap te verwijderen
    delete obj2.myProperty;
    console.log(obj2.myProperty); // Toont "Onveranderlijk en niet gemakkelijk te verwijderen"
    
  2. Gebruik van Object.freeze():

    Deze methode "bevriest" het object. Dit betekent dat je geen nieuwe eigenschappen kunt toevoegen, bestaande kunt verwijderen, de waarden van bestaande eigenschappen kunt wijzigen (inclusief hun enumerable en configurable), of het prototype van het object kunt wijzigen.

    const obj = {
      myProperty: 'Onveranderlijke waarde'
    };
    
    Object.freeze(obj);
    
    // Poging om de waarde te wijzigen
    obj.myProperty = 'Nieuwe waarde';
    console.log(obj.myProperty); // Toont "Onveranderlijke waarde"
    
    // Poging om een nieuwe eigenschap toe te voegen
    obj.newProperty = 'Nieuw';
    console.log(obj.newProperty); // undefined
    
    // Poging om de eigenschap te verwijderen
    delete obj.myProperty;
    console.log(obj.myProperty); // "Onveranderlijke waarde"
    

    Het is belangrijk op te merken dat Object.freeze() oppervlakkig is. Als een eigenschap van het object een ander object is, wordt dat interne object niet bevroren.

  3. Gebruik van const voor variabelen die objecten bevatten:

    Het sleutelwoord const maakt de verwijzing naar het object onveranderlijk, maar niet het object zelf. Je kunt de variabele niet opnieuw toewijzen aan een ander object, maar je kunt de eigenschappen van het object wijzigen.

    const obj = {
      myProperty: 'Beginwaarde'
    };
    
    // De waarde van de eigenschap kan worden gewijzigd
    obj.myProperty = 'Nieuwe waarde';
    console.log(obj.myProperty); // Toont "Nieuwe waarde"
    
    // De variabele kan niet opnieuw worden toegewezen
    // obj = { anotherProperty: 'Andere' }; // Geeft een TypeError
    

Vergelijking van methoden:

Methode Wat maakt onveranderlijk? Niveau van onveranderlijkheid
Object.defineProperty() Een specifieke eigenschap Gedefinieerd door descriptor
Object.freeze() Het hele object Oppervlakkig
const De verwijzing naar het object Variabele

De keuze van methode hangt af van hoe granulair de onveranderlijkheid moet zijn. Voor één eigenschap is Object.defineProperty() geschikt, voor het hele object Object.freeze(). Om de heraanduiding van de verwijzing te voorkomen, wordt const gebruikt.