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