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,superanahtar kelimeleriyle prototip tabanlı kalıtım için sözdizimi şekeridir.