Obyektin xüsusiyyətini necə dəyişməz etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Obyektin xüsusiyyətini dəyişməz etmək üçün bir neçə üsul mövcuddur:
-
Object.defineProperty()istifadə edərək:Bu metod obyektin xüsusiyyətlərini daha granular şəkildə tənzimləməyə imkan verir. Dəyişməz xüsusiyyət yaratmaq üçün xüsusiyyətin təsvirçisini
writable: falseolaraq təyin etmək lazımdır.const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Dəyişməz dəyər', writable: false, // Xüsusiyyəti dəyişməz edir enumerable: true, // Siyahıya alınacaq configurable: true // Silinə və dəyişdirilə bilər }); // Dəyəri dəyişdirməyə cəhd edilərsə, qeyri-şərti rejimdə ignore ediləcək // və sərt rejimdə TypeError xətası verəcək obj.myProperty = 'Yeni dəyər'; console.log(obj.myProperty); // "Dəyişməz dəyər" çıxaracaqƏgər
configurable: falsetəyin edilərsə, xüsusiyyət silinə və ya təsvirçisi dəyişdirilə bilməz (həmçininwritable).const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'Dəyişməz və silinməsi çətindir', writable: false, enumerable: true, configurable: false // Təsvirçini dəyişməz edir }); // Dəyəri dəyişdirməyə cəhd obj2.myProperty = 'Yeni dəyər'; console.log(obj2.myProperty); // "Dəyişməz və silinməsi çətindir" // Xüsusiyyəti silməyə cəhd delete obj2.myProperty; console.log(obj2.myProperty); // "Dəyişməz və silinməsi çətindir" -
Object.freeze()istifadə edərək:Bu metod obyektin "donmuş" vəziyyətə gətirir. Bu, yeni xüsusiyyətlər əlavə etməyi, mövcud xüsusiyyətləri silməyi, mövcud xüsusiyyətlərin dəyərlərini dəyişdirməyi (onların siyahıya alınması və konfiqurasiya edilə bilməsini daxil olmaqla), və həmçinin obyektin prototipini dəyişdirməyi qadağan edir.
const obj = { myProperty: 'Dəyişməz dəyər' }; Object.freeze(obj); // Dəyəri dəyişdirməyə cəhd obj.myProperty = 'Yeni dəyər'; console.log(obj.myProperty); // "Dəyişməz dəyər" çıxaracaq // Yeni xüsusiyyət əlavə etməyə cəhd obj.newProperty = 'Yeni'; console.log(obj.newProperty); // undefined çıxaracaq // Xüsusiyyəti silməyə cəhd delete obj.myProperty; console.log(obj.myProperty); // "Dəyişməz dəyər" çıxaracaqQeyd etmək lazımdır ki,
Object.freeze()səthidir. Əgər obyektin xüsusiyyəti başqa bir obyekt isə, bu daxili obyekt dondurulmayacaq. -
constistifadə edərək dəyişməz dəyişənlər:constaçar sözü obyektə olan istinadın dəyişməz olmasını təmin edir, amma obyektin özü deyil. Siz başqa obyektə təyin etməyi dayandıra bilərsiniz, amma obyektin xüsusiyyətlərini dəyişə bilərsiniz.const obj = { myProperty: 'İlkin dəyər' }; // Xüsusiyyətin dəyərini dəyişə bilərsiniz obj.myProperty = 'Yeni dəyər'; console.log(obj.myProperty); // "Yeni dəyər" çıxaracaq // Dəyişəni başqa obyektə təyin etmək mümkün deyil // obj = { başqaXüsusiyyət: 'Başqa' }; // TypeError verəcək
Metodların müqayisəsi:
| Metod | Nəyi dəyişməz edir? | Dəyişməzlik səviyyəsi |
|---|---|---|
Object.defineProperty() |
Bir xüsusiyyəti | Descriptor ilə təyin edilir |
Object.freeze() |
Bütün obyekt | Səthidir |
const |
Referansı obyektə | Dəyişən |
Metod seçimi, dəyişməzliyin nə qədər granular olmalı olduğundan asılıdır. Bir xüsusiyyət üçün Object.defineProperty(), bütün obyekt üçün - Object.freeze(). Referansı dəyişməz etmək üçün const istifadə olunur.