Prototype zinciri
Bir özelliğe erişirken prototype zincirinde nasıl arama yapıldığını öğrenirsin.
Prototype zinciri
Bir özelliğe erişince JavaScript önce nesnenin kendisine bakar. Bulamazsa prototipine, orada da yoksa prototipinin prototipine geçer. Bu yürüyüşe prototype zinciri (prototype chain) denir.
const base = { kind: 'memeli' };
const child = Object.create(base);
child.kind; // 'memeli' — base'ten geldiZincir, prototipi null olan nesnede biter. Object.prototype, çoğu nesnenin zincirinin köküdür.
Gölgeleme
Bir nesneye, prototipinde zaten var olan bir özelliği eklersen bu duruma gölgelme (shadowing) denir. Nesnenin kendi özelliği, prototiptekini gizler.
const base = { speed: 10 };
const child = Object.create(base);
child.speed = 25;
child.speed; // 25 — kendi özelliği
base.speed; // 10 — değişmediAtama yalnızca child üzerine yazılır; base etkilenmez. Prototipteki özelliği yine de Object.getPrototypeOf(child).speed ile okuyabilirsin.
Uygulama İki kademeli prototip zinciri kur
animalProto nesnesini tanımla; kind: 'hayvan' özelliği olsun. dogProto'yu Object.create(animalProto) ile üret ve dogProto.bark'a bir işlev ekle: 'hav' döndürsün. rex'i Object.create(dogProto) ile üret; sonra rex.name = 'Rex' ile kendi özelliğini ata. Son olarak console.log(rex.kind), console.log(rex.bark()) ve console.log(rex.name) çağrılarını yap.
Örnek çözümü göster
const animalProto = { kind: 'hayvan' };
const dogProto = Object.create(animalProto);
dogProto.bark = function () {
return 'hav';
};
const rex = Object.create(dogProto);
rex.name = 'Rex';
console.log(rex.kind);
console.log(rex.bark());
console.log(rex.name);
Kendini test et
-
Bir özellik hem nesnede hem prototipte varsa hangi kullanılır?
const base = { speed: 10 }; const child = Object.create(base); child.speed = 25; child.speed;- Prototipteki değer
- İkisinin toplamı
- undefined
- Nesnenin kendi değeri
Cevabı göster
Nesnenin kendi değeri — Doğru! Nesnenin kendi özelliği prototiptekini gölgede bırakır.
-
hasOwnProperty kontrolü
if (child.____('speed')) { console.log('kendi özelliği'); }Cevabı göster
if (child.hasOwnProperty('speed')) { console.log('kendi özelliği'); } -
Zincir terimlerini eşleştir
- lookup
- zincirde arama
- shadowing
- kendi özellik önceliği
- Object.prototype
- zincirin kökü
- null prototype
- zincirin sonu