JavaScript'de Object.freeze(), Object.seal() ve Object.defineProperty() kavramları

Photo by Luca Upper on Unsplash

JavaScript'de Object.freeze(), Object.seal() ve Object.defineProperty() kavramları

Object.freeze(), Object.seal() ve Object.defineProperty() gibi kavramlar, JavaScript nesne yönelimli programlama paradigmalarında oldukça önemlidir. Bu kavramları örneklerle açıklamaya çalışalım.

Object.freeze()

Object.freeze() yöntemi, bir nesnenin değiştirilmesini engeller. Yani, bir nesneyi dondurabilirsiniz ve bu nesne üzerinde herhangi bir değişiklik yapılmayacaktır. Bu nesne için mevcut tüm özellikler, yazılımlar tarafından korunacaktır.

const person = {
  name: "John",
  age: 30,
  address: {
    city: "New York",
    state: "NY"
  }
};

// person nesnesini dondurma
Object.freeze(person);

// Değişiklik yapmaya çalışalım
person.name = "Mike";
person.address.city = "San Francisco";

console.log(person.name); // John
console.log(person.address.city); // New York

Yukarıdaki örnekte, Object.freeze() yöntemi kullanılarak person nesnesi donduruldu. Ardından, person.name ve person.address.city özellikleri değiştirildi. Ancak, sonuçta, person nesnesindeki özellikler değişmedi. Bu yöntem, değiştirilemez nesneler oluşturmanıza olanak sağlar.

Object.seal()

Object.seal() yöntemi, bir nesnenin değiştirilmesini engellemez, ancak özelliklerin eklenmesini veya silinmesini engeller. Bu nesnenin mevcut özellikleri değiştirilebilir, ancak özelliklerine eklenen veya silinen bir değişiklik yapılamaz.

const person = {
  name: "John",
  age: 30,
  address: {
    city: "New York",
    state: "NY"
  }
};

// person nesnesini mühürleme
Object.seal(person);

// Değişiklik yapmaya çalışalım
person.name = "Mike";
person.address.city = "San Francisco";
person.gender = "Male";

console.log(person.name); // Mike
console.log(person.address.city); // San Francisco
console.log(person.gender); // undefined

Yukarıdaki örnekte, Object.seal() yöntemi kullanılarak person nesnesi mühürlendi. Ardından, person.name ve person.address.city özellikleri değiştirildi. Ayrıca person.gender özelliği eklendi. Ancak, sonuçta, person nesnesi mühürlendiğinden, person.gender özelliği tanımlanmadı.

Object.defineProperty()

Object.defineProperty() metodu, nesne özelliklerini tanımlamak ve yapılandırmak için kullanılır. Bu metot, bir nesne özelliğinin değerini, yazılabilirliğini, erişilebilirliğini ve yapılandırılabilirliğini tanımlamak için kullanılır.

Örneğin, aşağıdaki örnekte Object.defineProperty() metodu kullanarak bir Person nesnesi tanımlıyoruz:

const Person = {};

Object.defineProperty(Person, 'name', {
  value: 'John',
  writable: false,
  enumerable: true,
  configurable: false
});

console.log(Person.name); // John
Person.name = 'Alice'; // Hata verir

Burada, Person nesnesine bir name özelliği ekledik ve value özelliğine John değerini atadık. Ayrıca, writable özelliğine false değerini atayarak, name özelliğinin değerinin değiştirilemez olduğunu belirledik. enumerable özelliğine true değerini atayarak, özelliğin for...in döngüsü gibi özellikleri listelemek için kullanılabileceğini belirledik. configurable özelliğine false değerini atayarak, özelliğin yapılandırılabilirliğini devre dışı bıraktık.

Sonuç

Bu yazıda JavaScript'te kullanılan önemli üç nesne yöntemi olan Object.freeze(), Object.seal() ve Object.defineProperty()'i inceledik.

  • Object.freeze() yöntemi, bir nesnenin özelliklerinin değiştirilemez hale getirilmesine yardımcı olur.

  • Object.seal() yöntemi, bir nesnenin özelliklerinin değiştirilemez hale getirilmesine ek olarak yeni özellikler eklenmesini de engeller.

  • Object.defineProperty() yöntemi, bir nesneye yeni özellikler eklemeyi, mevcut özelliklerin değiştirilmesini veya mevcut özellikleri silmeyi sağlar. Bu yöntem aynı zamanda özelliklerin özellikleri, özelliklerin değerlerine erişim kontrolü ve diğer özelliklerin tanımlanması için kullanılabilir.

Bu yöntemler sayesinde nesnelerinize ekstra güvenlik ve kontrol ekleyebilirsiniz. Özellikle büyük ölçekli projelerde, nesnelerin kontrol altında tutulması ve yanlışlıkla değiştirilmemesi için bu yöntemlerin kullanılması önemlidir.

Bu konuların derinlemesine anlaşılması ve uygulanması zaman alabilir, ancak uygulamaya başladığınızda farkı görebileceksiniz.