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:
-
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: falsewordt ingesteld, kan de eigenschap niet worden verwijderd of de descriptor worden gewijzigd (inclusiefwritable).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" -
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. -
Gebruik van
constvoor variabelen die objecten bevatten:Het sleutelwoord
constmaakt 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.