GeezerVison is showing id.javascript.info — Merubah "prototype"
kembali ke pelajaranDi 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 dari Rabbit.prototype dan dari [[Prototype]] dari rabbit.
Jadi ketika kita mengubah kontennya melalui satu referensi, itu masih terlihat melalui yang lainnya.
-
true.
Semua operasi delete diterapkan langsung ke objeknya. Disini delete rabbit.eats mencoba untuk menghapus properti eats dari rabbit, tapi itu tidak memilikinya. Jadi operasinya tidak akan menghasilkan efek apapun.
-
undefined.
Properti eats dihapus dari prototype, itu tidak akan ada lagi.