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
alert
show 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.prototype
menyetel[[Prototype]]
untuk objek baru, tapi itu tidak memberikan efek pada yang sudah ada. -
false
.Objek yang dimasukan dengan menggunakan referensi. Objek dari
Rabbit.prototype
bukanlah di duplikasi, itu masih tetap objek tunggal yang direferensikan dariRabbit.prototype
dan dari[[Prototype]]
darirabbit
.Jadi ketika kita mengubah kontennya melalui satu referensi, itu masih terlihat melalui yang lainnya.
-
true
.Semua operasi
delete
diterapkan langsung ke objeknya. Disinidelete rabbit.eats
mencoba untuk menghapus propertieats
darirabbit
, tapi itu tidak memilikinya. Jadi operasinya tidak akan menghasilkan efek apapun. -
undefined
.Properti
eats
dihapus dari prototype, itu tidak akan ada lagi.