Hogyan lesz az objektum tulajdonsága változtathatatlan?
sobes.tech MI
Válasz az MI-től
Hogyan lehet egy objektum tulajdonságát változatlanná tenni többféleképpen:
-
Object.defineProperty()használata:Ez a módszer lehetővé teszi az objektum tulajdonságainak definiálását vagy módosítását finomabb ellenőrzéssel. Változatlan tulajdonság létrehozásához a tulajdonság leíróját
writable: falseértékre kell állítani.const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Változatlan érték', writable: false, // Változatlanná teszi a tulajdonságot enumerable: true, // Látható lesz az iteráció során configurable: true // Törölhető vagy módosítható a leíró }); // A változtatási kísérlet figyelmen kívül marad nem szigorú módban // és TypeError-t fog kiváltani szigorú módban obj.myProperty = 'Új érték'; console.log(obj.myProperty); // "Változatlan érték" leszHa
configurable: falseértéket adunk meg, a tulajdonság nem törölhető vagy módosítható (beleértve awritable-t is).const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'Változatlan és nehezen törölhető', writable: false, enumerable: true, configurable: false // Változatlanná teszi a leíróját }); // A változtatási kísérlet obj2.myProperty = 'Új érték'; console.log(obj2.myProperty); // "Változatlan és nehezen törölhető" // Tulajdonság törlésének kísérlete delete obj2.myProperty; console.log(obj2.myProperty); // "Változatlan és nehezen törölhető" -
Object.freeze()használata:Ez a módszer "lefagyasztja" az objektumot. Ez azt jelenti, hogy nem lehet új tulajdonságokat hozzáadni, meglévőket törölni, meglévő tulajdonságokat módosítani (beleértve azok enumerability-jét és konfigurálhatóságát), valamint az objektum prototípusát módosítani.
const obj = { myProperty: 'Változatlan érték' }; Object.freeze(obj); // A változtatási kísérlet obj.myProperty = 'Új érték'; console.log(obj.myProperty); // "Változatlan érték" // Új tulajdonság hozzáadásának kísérlete obj.newProperty = 'Új'; console.log(obj.newProperty); // undefined // Tulajdonság törlésének kísérlete delete obj.myProperty; console.log(obj.myProperty); // "Változatlan érték"Fontos megjegyezni, hogy a
Object.freeze()felszíni. Ha az objektum egyik tulajdonsága másik objektum, akkor ez a belső objektum nem lesz lefagyasztva. -
consthasználata objektumot tartalmazó változóknál:A
constkulcsszó a referencia változatlanságát biztosítja az objektumhoz, de nem az objektum magához. Nem fogja lehetővé tenni a változó másik objektumra való átállítását, de a tulajdonságokat módosíthatja.const obj = { myProperty: 'Kezdeti érték' }; // A tulajdonság értékének módosítása lehetséges obj.myProperty = 'Új érték'; console.log(obj.myProperty); // "Új érték" // A változó átállítása nem lehetséges // obj = { másTulajdonság: 'Más' }; // TypeError-t fog eredményezni
Metódusok összehasonlítása:
| Módszer | Mit tesz változatlanná? | Változatlanság szintje |
|---|---|---|
Object.defineProperty() |
Egy adott tulajdonságot | Leíró szerint definiálva |
Object.freeze() |
Az egész objektum | Sík felületű |
const |
A referencia az objektumra | Változó |
A módszer kiválasztása attól függ, hogy mennyire kell részletes legyen a változatlanság. Egy tulajdonsághoz a Object.defineProperty() megfelelő, az egész objektumhoz a Object.freeze(). A referencia átállásának megakadályozására a const használható.