Tanımlayıcılar hakkında ne biliyorsun?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te tanımlayıcılar, bir nesnenin özelliklerini tanımlayan nesnelerdir; bunlar değer (value), yazılabilirlik (writable), dizilebilirlik (enumerable) ve yapılandırılabilirlik (configurable) gibi özellikleri içerir. Ayrıca getter ve setter içeren tanımlayıcılar da vardır.
İki tür tanımlayıcı vardır:
-
Veri tanımlayıcılar: Özelliğin değerini içerir.
value: Özelliğin değeri. Herhangi geçerli veri tipi olabilir.writable: Bir boolean değer. Eğertrueise, özellik değeri değiştirilebilir (obj.prop = newValue). Varsayılan olarak, erişim özellikleri içinfalseve normal atamalarla oluşturulan veri özellikleri içintruedir.enumerable: Bir boolean değer. Eğertrueise, özellik nesne özellikleri arasında gezinirken görünür (örneğin,for...indöngüsü veyaObject.keys()kullanılarak). Varsayılan olarak,Object.definePropertyile eklenen özellikler içinfalseve normal atamalarla oluşturulanlar içintruedir.configurable: Bir boolean değer. Eğertrueise, tanımlayıcının özellikleri (değer ve writable hariç) değiştirilebilir ve özellik silinebilir. Varsayılan olarak,Object.definePropertyile eklenen özellikler içinfalseve normal atamalarla oluşturulanlar içintruedir. Bir kez yapılandırıldığında, değiştirilemez hale gelir.true'danfalse'a writable'ı azaltabilirsiniz, ancakget/set'te non-configurable ise, tersini yapamazsınız.
-
Aksesör tanımlayıcılar: Özelliğin alınması (getter) veya ayarlanması (setter) sırasında çağrılacak fonksiyonları tanımlar.
get: Özelliğin okunması sırasında çağrılan fonksiyon. Bu fonksiyonun argümanı yoktur.set: Özelliğe yazılırken çağrılan fonksiyon. Bir argüman alır, bu yeni değeri temsil eder.enumerable: Bir boolean değer (veri tanımlayıcılarına benzer).configurable: Bir boolean değer (veri tanımlayıcılarına benzer).
Tanımlayıcılar karıştırılamaz: Bir özellik ya value ve writable'a sahip olur, ya da get ve set'e.
Tanımlayıcılar, nesnenin özelliklerini daha düşük seviyede yönetmek için kullanılır; özellikle Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), Object.getOwnPropertyDescriptors(), Object.create() metodlarıyla.
Bir veri tanımlayıcıyla özellik oluşturma örneği:
// Boş bir nesne oluştur
const obj = {};
// 'name' özelliğini veri tanımlayıcısı ile tanımla
Object.defineProperty(obj, 'name', {
value: 'Alice',
writable: false, // Özellik değiştirilemez
enumerable: true, // Özellik listelenebilir
configurable: false // Özelliğin özellikleri değiştirilemez ve silinemez
});
console.log(obj.name); // Çıktı: Alice
// Özelliği değiştirmeye çalışma (strict modda yok sayılır veya hata verir)
obj.name = 'Bob';
console.log(obj.name); // Çıktı: Alice
// Özelliği silmeye çalışma (yok sayılır veya hata verir)
delete obj.name;
console.log(obj.name); // Çıktı: Alice
Aksesör tanımlayıcısı ile özellik oluşturma örneği:
// Özel bir değişken ile nesne oluştur
const user = {
_firstName: 'John', // Anlaşmaya göre özel değişken
_lastName: 'Doe'
};
// 'fullName' özelliğini aksesör tanımlayıcısı ile tanımla
Object.defineProperty(user, 'fullName', {
get() {
// Getter: tam adı döndürür
return `${this._firstName} ${this._lastName}`;
},
set(value) {
// Setter: tam adı bölüp özel değişkenleri günceller
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
},
enumerable: true, // Listelenebilir
configurable: true // Değiştirilebilir ve silinebilir
});
console.log(user.fullName); // Çıktı: John Doe
user.fullName = 'Peter Pan';
console.log(user._firstName); // Çıktı: Peter
console.log(user._lastName); // Çıktı: Pan
console.log(user.fullName); // Çıktı: Peter Pan
Tanımlayıcıların kullanımı, değiştirilemez özellikler, tembel hesaplama özellikleri, erişim kontrolü (getter/setter) özellikleri oluşturmayı ve nesnelerin davranışını daha esnek yönetmeyi sağlar.