JavaScript'te Prototype Inheritance ve Prototype Chain

JavaScript'te Prototype Inheritance ve Prototype Chain, nesne tabanlı programlama modelinde önemli bir kavramdır ve JavaScript'in nesne tabanlı yapısının temelini oluşturur.

Prototype Inheritance (Prototip Mirası)

JavaScript'te her nesne bir prototipe (prototype) sahiptir. Prototip, bir nesnenin özelliklerini ve metotlarını diğer nesnelere miras olarak aktarmak için kullanılır. Bir nesnenin prototipi, o nesnenin metotlarını ve özelliklerini barındırır. Yani, bir nesne diğer bir nesnenin prototipini referans alabilir ve bu şekilde özellikleri ve metotları miras alabilir. Örneğin:

// Bir prototip oluşturma
let arac = {
  marka: 'Audi',
  model: 'A6',
  hizlan: function() {
    console.log('Araba hızlanıyor...');
  }
};

// Yeni bir nesne oluşturma ve prototipini belirtme
let yeniArac = Object.create(arac);
console.log(yeniArac.marka); // Audi
yeniArac.hizlan(); // Araba hızlanıyor...

Bu örnekte, arac isimli bir prototip nesne oluşturulmuş ve yeniArac nesnesi bu prototipi miras alarak marka ve hizlan özelliklerini kullanmıştır.

Prototype Chain (Prototip Zinciri)

JavaScript'te her nesnenin bir prototip referansı vardır. Eğer bir özellik ya da metot bir nesnede bulunamazsa, JavaScript bu özelliği veya metodu o nesnenin prototipinden aramaya devam eder. Bu şekilde, bir nesnenin prototipi diğer bir nesnenin prototipi olabilir ve bu zincir uzayarak devam edebilir. Bu yapıya "Prototype Chain" denir. Örneğin:

// Bir prototip oluşturma
let arac = {
  marka: 'Audi',
};

// Bir başka prototip oluşturma ve önceki prototipi miras alma
let otomobil = {
  motor: '1200cc',
};
otomobil.__proto__ = arac;

console.log(otomobil.marka); // Audi

Bu örnekte, arac ve otomobil prototipleri oluşturulmuş ve otomobil prototipi içinde marka özelliği, arac prototipinden miras alınmıştır. Bu şekilde Prototype Chain oluşturulmuştur.

Sonuç

JavaScript'te Prototype Inheritance ve Prototype Chain, nesne tabanlı programlamanın temel kavramlarıdır. Prototipler sayesinde nesneler arasında miras verme ve zincirleme bir yapı oluşturulabilir, bu da JavaScript'in esnekliğini ve gücünü arttırır. Bu kavramları anlayarak JavaScript'te daha etkili ve organize kodlar yazabilirsiniz.