Ինչպե՞ս դարձնել օբյեկտի հատկությունը փոփոխական չլինել:
sobes.tech AI
Պատասխան AI-ից
Ինչպես դարձնել օբյեկտի հատկությունը անփոփոխ, կան մի քանի եղանակներ:
-
Օգտագործել
Object.defineProperty():Այս մեթոդը թույլ է տալիս սահմանել կամ փոփոխել օբյեկտի հատկությունները ավելի մանրամասն վերահսկողությամբ: Անփոփոխ հատկություն ստեղծելու համար անհրաժեշտ է սահմանել հատկության դեսկրիպտորը
writable: false:const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Անփոփոխ արժեք', writable: false, // Դարձնում է հատկությունը անփոփոխ enumerable: true, // Հատկությունը տեսանելի կլինի շրջելիս configurable: true // Հատկությունը հնարավոր է ջնջել կամ փոփոխել նրա դեսկրիպտորը }); // Փորձը փոփոխել արժեքը կդատապարտվի ոչ խիստ ռեժիմում // և կհանգեցնի TypeError- ի խիստ ռեժիմում obj.myProperty = 'Նոր արժեք'; console.log(obj.myProperty); // Տպում է "Անփոփոխ արժեք"Եթե սահմանել
configurable: false, ապա հատկությունը չի կարող ջնջվել կամ փոփոխվել նրա դեսկրիպտորը (ներառյալwritable):const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'Անփոփոխ և հեշտությամբ չջնջվող', writable: false, enumerable: true, configurable: false // Դարձնում է դեսկրիպտորը անփոփոխ }); // Փորձը փոփոխել արժեքը obj2.myProperty = 'Նոր արժեք'; console.log(obj2.myProperty); // Տպում է "Անփոփոխ և հեշտությամբ չջնջվող" // Փորձը ջնջել հատկությունը delete obj2.myProperty; console.log(obj2.myProperty); // Տպում է "Անփոփոխ և հեշտությամբ չջնջվող" -
Օգտագործել
Object.freeze():Այս մեթոդը դարձնում է օբյեկտը "մասամբ սառեցված": այն նշանակում է, որ հնարավոր չէ ավելացնել նոր հատկություններ, ջնջել առկա, փոփոխել առկա հատկությունների արժեքները (ներառյալ դրանց ցուցադրման և դեսկրիպտորի փոփոխությունը), ինչպես նաև փոխել օբյեկտի պրոտոտիպը:
const obj = { myProperty: 'Անփոփոխ արժեք' }; Object.freeze(obj); // Փորձը փոփոխել արժեքը obj.myProperty = 'Նոր արժեք'; console.log(obj.myProperty); // Տպում է "Անփոփոխ արժեք" // Փորձը ավելացնել նոր հատկություն obj.newProperty = 'Նոր'; console.log(obj.newProperty); // Տպում է `undefined` // Փորձը ջնջել հատկությունը delete obj.myProperty; console.log(obj.myProperty); // Տպում է "Անփոփոխ արժեք"Կարևոր է նշել, որ
Object.freeze()մակերեսային է: Եթե օբյեկտի հատկությունը այլ օբյեկտ է, այն չի սառեցվի: -
Օգտագործել
constփոփոխականի համար, որը պարունակում է օբյեկտ:Կողմից
constբանալի բառը դարձնում է հղումը օբյեկտին անփոփոխ, բայց ոչ ինքն օբյեկտը: Դուք չեք կարող փոխել հղումը, բայց կարող եք փոփոխել օբյեկտի հատկությունները:const obj = { myProperty: 'Սկզբնական արժեք' }; // Կարող եք փոփոխել հատկության արժեքը obj.myProperty = 'Նոր արժեք'; console.log(obj.myProperty); // Տպում է "Նոր արժեք" // Չեք կարող փոխել հղումը // obj = { այլ հատկություն: 'Այլ' }; // կգործի TypeError
Համեմատական աղյուսակ մեթոդների մասին:
| Մեթոդ | Ինչ է դարձնում անփոփոխ? | Անփոփոխության մակարդակը |
|---|---|---|
Object.defineProperty() |
Մեկ հատկություն | Դեսկրիպտորի սահմանումով |
Object.freeze() |
Բոլոր օբյեկտը | Մակերեսային |
const |
Հղում օբյեկտին | Փոփոխական |
Ընտրությունը կախված է այն բանից, թե որքան մանրամասն պետք է լինի անփոփոխությունը: Մի հատկության համար հարմար է Object.defineProperty(), ամբողջ օբյեկտի համար՝ Object.freeze(), իսկ հղումը փոխելուց՝ const։