Sobes.tech
Junior

JavaScript'te kalıtım nasıl çalışır, açıklayınız.

sobes.tech yapay zeka

AI'dan gelen yanıt

JavaScript'te kalıtım, prototiplere dayanır. Her nesnenin içsel bir özelliği [[Prototype]] (erişilebilir __proto__ veya Object.getPrototypeOf() aracılığıyla) vardır ve bu başka bir nesneye işaret eder.

Bir nesnenin özelliğine veya metoduna erişmeye çalışırken, eğer nesnede doğrudan bulunmuyorsa, JavaScript onu [[Prototype]] içinde arar, sonra prototipin [[Prototype]]'inde ve böylece prototip zinciri boyunca devam eder, ta ki sona ulaşana kadar (Object.prototype), onun [[Prototype]]'i null'dur.

Bu, prototip tabanlı kalıtımdır.

ECMAScript 2015 (ES6) içindeki sınıflar, prototip kalıtımının sözdizimsel şekeridir. Prototiplerle çalışma ve nesne hiyerarşileri oluşturma konusunda daha alışılmış bir sözdizimi sağlarlar.

ES6 öncesi prototip kalıtımını kullanma örneği:

// Ebeveyn yapıcı fonksiyon
function Animal(name) {
  this.name = name;
}

// Ebeveynin prototipinde metod
Animal.prototype.sayHi = function() {
  console.log(`Merhaba, ben ${this.name}`);
};

// Çocuk yapıcı fonksiyon
function Dog(name, breed) {
  // Ebeveyn yapıcıyı çağır
  Animal.call(this, name);
  this.breed = breed;
}

// Çocuğun prototipini ebeveynin prototipine ayarla
// Dog yapıcısına referansı koru
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// Çocuğa metod ekle
Dog.prototype.bark = function() {
  console.log("Hav hav!");
};

// Çocuk örneği oluştur
const myDog = new Dog("Boby", "Labrador");

// Ebeveyn ve çocuk metodlarını kullan
myDog.sayHi(); // Çıktı: Merhaba, ben Boby
myDog.bark();  // Çıktı: Hav hav!

ES6 sınıflarını kullanma örneği:

// Ebeveyn sınıf
class Animal {
  constructor(name) {
    this.name = name;
  }

  sayHi() {
    console.log(`Merhaba, ben ${this.name}`);
  }
}

// Animal'den türeyen alt sınıf
class Dog extends Animal {
  constructor(name, breed) {
    // Ebeveyn yapıcıyı çağır
    super(name);
    this.breed = breed;
  }

  bark() {
    console.log("Hav hav!");
  }
}

// Alt sınıf örneği oluştur
const myDog = new Dog("Rex", "Alman Çoban Köpeği");

// Ebeveyn ve alt sınıf metodlarını kullan
myDog.sayHi(); // Çıktı: Merhaba, ben Rex
myDog.bark();  // Çıktı: Hav hav!

JavaScript'te kalıtımın anahtar noktaları:

  • Prototipler: Her nesnenin bir prototipi vardır.
  • Prototip zinciri: Özellik veya metod araması, yukarı doğru prototipler boyunca devam eder.
  • [[Prototype]]: Prototipe işaret eden içsel özellik.
  • __proto__: [[Prototype]]'a erişmenin eski ve yaygın yolu.
  • Object.getPrototypeOf(): [[Prototype]]'a erişmenin önerilen yolu.
  • Yapıcılar ve prototype: ES6 öncesinde nesne oluşturmak ve prototipleri ayarlamak için kullanılır.
  • Sınıflar (ES6): class, extends, super anahtar kelimeleriyle prototip tabanlı kalıtım için sözdizimi şekeridir.