Merubah "prototype"
Di kode dibawah kita membuat new Rabbit, dan mencoba memodifikasi prototypenya.
Pada awalnya kita memiliki kode ini:
function Rabbit() {}
Rabbit.prototype = {
eats: true
};
let rabbit = new Rabbit();
alert( rabbit.eats ); // true
-
Kita menambah satu string (ditekankan). What will
alertshow now?function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; alert( rabbit.eats ); // ? -
???Dan jika kodenya seperti ini (diganti satu baris)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype.eats = false; alert( rabbit.eats ); // ? -
Dan seperti ini (diganti satu baris)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete rabbit.eats; alert( rabbit.eats ); // ? -
varian terakhir:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; alert( rabbit.eats ); // ?
Jawaban:
-
true.Memasukan ke
Rabbit.prototypemenyetel[[Prototype]]untuk objek baru, tapi itu tidak memberikan efek pada yang sudah ada. -
false.Objek yang dimasukan dengan menggunakan referensi. Objek dari
Rabbit.prototypebukanlah di duplikasi, itu masih tetap objek tunggal yang direferensikan dariRabbit.prototypedan dari[[Prototype]]darirabbit.Jadi ketika kita mengubah kontennya melalui satu referensi, itu masih terlihat melalui yang lainnya.
-
true.Semua operasi
deletediterapkan langsung ke objeknya. Disinidelete rabbit.eatsmencoba untuk menghapus propertieatsdarirabbit, tapi itu tidak memilikinya. Jadi operasinya tidak akan menghasilkan efek apapun. -
undefined.Properti
eatsdihapus dari prototype, itu tidak akan ada lagi.