kembali ke pelajaran

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
  1. 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 ); // ?
  2. …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 ); // ?
  3. Dan seperti ini (diganti satu baris)?

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete rabbit.eats;
    
    alert( rabbit.eats ); // ?
  4. varian terakhir:

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    delete Rabbit.prototype.eats;
    
    alert( rabbit.eats ); // ?

Jawaban:

  1. true.

    Memasukan ke Rabbit.prototype menyetel [[Prototype]] untuk objek baru, tapi itu tidak memberikan efek pada yang sudah ada.

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

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

  4. undefined.

    Properti eats dihapus dari prototype, itu tidak akan ada lagi.