Sobes.tech
Middle

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:

  1. 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: false olaraq 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: false təyin edilərsə, xüsusiyyət silinə və ya təsvirçisi dəyişdirilə bilməz (həmçinin writable).

    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"
    
  2. 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" çıxaracaq
    

    Qeyd 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.

  3. const istifadə edərək dəyişməz dəyişənlər:

    const aç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.