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:
-
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" -
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: -
Izmantojot
constar objektiem:Atslēgvārds
constpadara 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.