Sobes.tech
Middle

Bir nesne özelliğini nasıl değişmez hale getirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir nesnenin özelliğini değiştirilemez hale getirmenin birkaç yolu vardır:

  1. Object.defineProperty() kullanımı:

    Bu yöntem, nesnenin özelliklerini daha ayrıntılı kontrol ile tanımlamanıza veya değiştirmenize olanak tanır. Değiştirilemez bir özellik oluşturmak için, özelliğin tanımlayıcısını writable: false olarak ayarlamalısınız.

    const obj = {};
    Object.defineProperty(obj, 'myProperty', {
      value: 'Değiştirilemez değer',
      writable: false, // Özelliği değiştirilemez yapar
      enumerable: true, // Özellik yine de döngüde görünür
      configurable: true // Özelliğin silinmesine veya tanımlayıcısının değiştirilmesine izin verir
    });
    
    // Değeri değiştirmeye çalışma, mod olmayan durumda gözardı edilir
    // ve sıkı modda TypeError hatası verir
    obj.myProperty = 'Yeni değer';
    console.log(obj.myProperty); // "Değiştirilemez değer" gösterir
    

    configurable: false olarak ayarlanırsa, özellik silinemez veya tanımlayıcı değiştirilemez (writable dahil).

    const obj2 = {};
    Object.defineProperty(obj2, 'myProperty', {
      value: 'Değiştirilemez ve kolayca silinemez',
      writable: false,
      enumerable: true,
      configurable: false // Tanımlayıcıyı değiştirilemez yapar
    });
    
    // Değeri değiştirmeye çalışma
    obj2.myProperty = 'Yeni değer';
    console.log(obj2.myProperty); // "Değiştirilemez ve kolayca silinemez" gösterir
    
    // Özelliği silmeye çalışma
    delete obj2.myProperty;
    console.log(obj2.myProperty); // "Değiştirilemez ve kolayca silinemez" gösterir
    
  2. Object.freeze() kullanımı:

    Bu yöntem, nesneyi "dondurur". Bu, yeni özellikler eklenemeyeceği, mevcutlar silinemeyeceği, mevcut özelliklerin değerleri değiştirilemeyeceği (dahil olmak üzere, onların sayılabilirliği ve yapılandırılabilirliği) ve nesnenin prototipinin değiştirilemeyeceği anlamına gelir.

    const obj = {
      myProperty: 'Değiştirilemez değer'
    };
    
    Object.freeze(obj);
    
    // Değeri değiştirmeye çalışma
    obj.myProperty = 'Yeni değer';
    console.log(obj.myProperty); // "Değiştirilemez değer" gösterir
    
    // Yeni özellik eklemeye çalışma
    obj.newProperty = 'Yeni';
    console.log(obj.newProperty); // undefined gösterir
    
    // Özelliği silmeye çalışma
    delete obj.myProperty;
    console.log(obj.myProperty); // "Değiştirilemez değer" gösterir
    

    Object.freeze() yüzeysel bir işlemdir. Eğer nesnenin bir özelliği başka bir nesne ise, içteki nesne dondurulmaz.

  3. const kullanımıyla nesne içeren değişkenler:

    const anahtar kelimesi, nesne referansını değiştirilemez yapar, nesne kendisi değil. Değişkeni başka bir nesneye yeniden atayamazsınız, ancak nesnenin özelliklerini değiştirebilirsiniz.

    const obj = {
      myProperty: 'Başlangıç değeri'
    };
    
    // Özellik değerini değiştirebilirsiniz
    obj.myProperty = 'Yeni değer';
    console.log(obj.myProperty); // "Yeni değer" gösterir
    
    // Değişkeni yeniden atayamazsınız
    // obj = { başkaÖzellik: 'Başka' }; // TypeError hatası verir
    

Yöntemlerin karşılaştırması:

Yöntem Ne değiştirilemez hale gelir? Değiştirilemezlik seviyesi
Object.defineProperty() Belirli bir özellik Tanımlayıcı ile belirlenir
Object.freeze() Tüm nesne Yüzeysel
const Nesneye referans Değişken

Yöntem seçimi, ne kadar granular olması gerektiğine bağlıdır. Bir özellik için Object.defineProperty(), tüm nesne için Object.freeze(). Referansın yeniden atanmasını engellemek için const kullanılır.