"prototype"'i değiştirme
Aşağıdaki kodda new Rabbit
ile 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,
alert
ne 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.prototype
ataması[[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.prototype
hem 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
delete
operasyonları objeye doğrudan etki eder. Meseladelete rabbit.eats
rabbit
’teneats
özelliğini silmeye çalışır fakat yapaz. Bundan dolayı bu operasyonun hiçbir etkisi olayacaktır. -
undefined
.eats
prototip’ten silindiğinden dolayı artık bir etkisi olmayacaktır.