"prototype"'i değiştirme
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
-
Bir tane daha karakter dizisi ekledik,
alertne gösterir?function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; alert( rabbit.eats ); // ? -
…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 ); // ? -
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 ); // ? -
Son şekli:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; alert( rabbit.eats ); // ?
Cevaplar:
-
true.Rabbit.prototypeataması[[Prototype]]'I ayarlasada bu yeni objelerde etki eder. Var olanlarda bir değişikliğe neden olmaz. -
false.Objeler referanslar ile atanır.
Rabbit.prototype’tan alınan obje kopya değildir, hala hemRabbit.prototypehem derabbit’in[[Prototype]]'ı tarafından referans edilir.Bundan dolayı referans edilen herhangi bir yerden içeriik değişirse bu diğerini de etkiler.
-
true.Tüm
deleteoperasyonları objeye doğrudan etki eder. Meseladelete rabbit.eatsrabbit’teneatsözelliğini silmeye çalışır fakat yapaz. Bundan dolayı bu operasyonun hiçbir etkisi olayacaktır. -
undefined.eatsprototip’ten silindiğinden dolayı artık bir etkisi olmayacaktır.