Derse geri dön

"prototype"'i değiştirme

önem: 5

Aşağıdaki kodda new Rabbitile yeni bir Rabbit oluşturulmuş sonra prototype’ı değiştirilmeye çalışılmıştır.

Başlangıçta aşağıdaki koda sahibiz:

function Rabbit() {}
Rabbit.prototype = {
  eats: true
};

let rabbit = new Rabbit();

alert( rabbit.eats ); // true
  1. Bir tane daha karakter dizisi ekledik, alert ne gösterir?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype = {};
    
    alert( rabbit.eats ); // ?
  2. …Eğer kod aşağıdaki gibi değiştirilirse ne olur ( bir satır değiştirildi )?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    Rabbit.prototype.eats = false;
    
    alert( rabbit.eats ); // ?
  3. Ya böyle ? ( bir satır değiştirildi )

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete rabbit.eats;
    
    alert( rabbit.eats ); // ?
  4. Son şekli:

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete Rabbit.prototype.eats;
    
    alert( rabbit.eats ); // ?

Cevaplar:

  1. true.

    Rabbit.prototype ataması [[Prototype]]'I ayarlasada bu yeni objelerde etki eder. Var olanlarda bir değişikliğe neden olmaz.

  2. false.

    Objeler referanslar ile atanır. Rabbit.prototype’tan alınan obje kopya değildir, hala hem Rabbit.prototype hem de rabbit’in [[Prototype]]'ı tarafından referans edilir.

    Bundan dolayı referans edilen herhangi bir yerden içeriik değişirse bu diğerini de etkiler.

  3. true.

    Tüm delete operasyonları objeye doğrudan etki eder. Mesela