Kuidas teha objekti omadus muutumatuks?
sobes.tech AI
Vastus AI-lt
Objekti omaduste muutmatuks muutmiseks on mitu viisi:
-
Kasutades
Object.defineProperty():See meetod võimaldab määratleda või muuta objekti omadusi suurema kontrolliga. Muutumatuks omaduseks tuleb määrata omaduse kirjeldaja
writable: false:const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Muutumatu väärtus', writable: false, // Muudab omaduse muutumatuks enumerable: true, // Omadus on nähtav iteratsioonil configurable: true // Omadust saab kustutada või muuta selle kirjeldajat }); // Katsed muuta väärtust ignoreeritakse mitte-kriitilises režiimis // ja põhjustab viga TypeError kriitilises režiimis obj.myProperty = 'Uus väärtus'; console.log(obj.myProperty); // Väljundib "Muutumatu väärtus"Kui määrate
configurable: false, ei saa omadust kustutada ega muuta selle kirjeldajat:const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'Muutumatu ja kergesti kustutamatu', writable: false, enumerable: true, configurable: false // Muudab kirjeldaja muutumatuks }); // Katsed muuta väärtust obj2.myProperty = 'Uus väärtus'; console.log(obj2.myProperty); // Väljundib "Muutumatu ja kergesti kustutamatu" // Katsed kustutada omadus delete obj2.myProperty; console.log(obj2.myProperty); // Väljundib "Muutumatu ja kergesti kustutamatu" -
Kasutades
Object.freeze():See meetod muudab objekti "jäädunud". See tähendab, et ei saa lisada uusi omadusi, kustutada olemasolevaid, muuta olemasolevate omaduste väärtusi (sh nende loetavust ja konfigureeritavust), ning muuta objekti prototüüpi:
const obj = { myProperty: 'Muutumatu väärtus' }; Object.freeze(obj); // Katsed muuta väärtust obj.myProperty = 'Uus väärtus'; console.log(obj.myProperty); // Väljundib "Muutumatu väärtus" // Katsed lisada uus omadus obj.newProperty = 'Uus'; console.log(obj.newProperty); // Väljundib `undefined` // Katsed kustutada omadus delete obj.myProperty; console.log(obj.myProperty); // Väljundib "Muutumatu väärtus"Oluline on märkida, et
Object.freeze()on pindmine. Kui omadus on teine objekt, ei jää see jäädunud: -
Kasutades
constmuutujat, mis hoiab objekti:Sõna
constmuudab viite objekti muutumatuks, kuid ise objekt on muutuv. Te ei saa viidet muuta, kuid saate muuta objekti omadusi:const obj = { myProperty: 'Algväärtus' }; // Võite muuta omaduse väärtust obj.myProperty = 'Uus väärtus'; console.log(obj.myProperty); // Väljundib "Uus väärtus" // Viidet ei saa muuta // obj = { teineOmadus: 'Teine' }; // Annab TypeError
Võrdlustabel meetodite kohta:
| Meetod | Mida teeb? | Muutumatuse tase |
|---|---|---|
Object.defineProperty() |
Üks konkreetne omadus | Kirjeldaja kaudu |
Object.freeze() |
Kogu objekt | Pindmine |
const |
Viide objekti | Muutuv |
Valik sõltub sellest, kui detailselt soovite muutumatust. Ühele omadusele sobib Object.defineProperty(), kogu objekti jaoks Object.freeze(). Viite muutmise vältimiseks kasutage const.