Объекттин мүнөздөмөсүн өзгөртпөстү үчүн кандай кылуу керек?
sobes.tech AI
AIден жооп
Объекттин мүлктүүлүгүн өзгөртпөстөн кылуу үчүн бир нече жол бар:
-
Object.defineProperty()колдонуу:Бул метод объекттин мүлктөрүн көбүрөөк көзөмөл менен аныктоого же өзгөртүүгө мүмкүндүк берет. Өзгөрүлбөс мүлк түзүү үчүн, мүлктүн дескрипторун
writable: falseдеп коюңуз:const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Өзгөрүлбөс мааниси', writable: false, // Мүлктү өзгөртүлбөс кылат enumerable: true, // Тизмеде көрүнөт configurable: true // Жок кылуу же дескрипторун өзгөртүү мүмкүн }); // Маанини өзгөртүү аракеттери эскертилбейт // жана каталар чыгышы мүмкүн 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 колдонулат.