GeezerVison is showing tr.javascript.info — "prototype"'i değiştirme
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
-
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 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.
-
true.
Tüm delete operasyonları objeye doğrudan etki eder. Mesela delete rabbit.eats rabbit’ten eats ö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.