CodeBlanks Logo Icon CodeBlanks

Prototype zinciri

JavaScript kursu · İleri seviye · Ders 16/100

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 geldi

Zincir, 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şmedi

Atama 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

  1. 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.

  2. hasOwnProperty kontrolü

    if (child.____('speed')) {
      console.log('kendi özelliği');
    }
    Cevabı göster
    if (child.hasOwnProperty('speed')) {
      console.log('kendi özelliği');
    }
  3. Zincir terimlerini eşleştir

    lookup
    zincirde arama
    shadowing
    kendi özellik önceliği
    Object.prototype
    zincirin kökü
    null prototype
    zincirin sonu

İleri seviye bölümündeki tüm dersler