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.