JavaScript adalah satu -satunya bahasa yang banyak digunakan untuk warisan prototipe, sehingga perlu waktu untuk memahami perbedaan antara dua metode warisan.
Perbedaan utama pertama adalah bahwa JavaScript menggunakan rantai prototipe untuk diwariskan:
function foo () {this.value = 42;} foo.prototype = {method: function () {}}; function bar () {}Setel prototipe bar ke instance objek Foo:
Bar.prototype = foo baru (); bar.prototype.foo = 'Hello World';
Pastikan bahwa konstruktor bar itu sendiri dan buat instance objek bar baru:
Bar.prototype.constructor = bar; var test = bar baru ();
Mari kita lihat komposisi seluruh rantai prototipe:
test [instance bilah] bar.prototype [instance of foo] {foo: 'hello world'} foo.prototype {Method: ...} object.prototype {toString: ... / * dll. * /}Dalam contoh di atas, uji objek akan mewarisi kedua Bar.prototype dan foo.prototype. Oleh karena itu dapat mengakses metode fungsi yang ditentukan dalam FOO. Tentu saja, itu juga dapat mengakses nilai properti. Harus disebutkan bahwa ketika bar baru () tidak dibuat, instance foo baru digunakan kembali, tetapi instance foo yang dilengkapi dengan objek prototipe. Demikian pula, semua instance bar berbagi atribut nilai yang sama. Mari Berikan Contoh:
test1 = bar baru (); test2 = bar baru (); Bar.prototype.value = 41; test1.value // 41 test2.value // 41
Mekanisme pencarian rantai prototipe
Saat mengakses properti objek, JavaScript akan melintasi seluruh rantai prototipe dari objek itu sendiri sampai menemukan properti yang sesuai. Jika Anda mencapai bagian atas rantai prototipe, yang merupakan objek.prototype dalam contoh di atas, dan masih belum ada atribut yang dapat ditemukan, maka JavaScript akan mengembalikan nilai yang tidak ditentukan.
Sifat objek prototipe
Meskipun sifat -sifat objek prototipe digunakan oleh JavaScript untuk membangun rantai prototipe, kami masih dapat menetapkan nilai untuk itu. Tetapi menyalin nilai asli ke prototipe tidak valid, seperti:
function foo () {} foo.prototype = 1; // tidak berpengaruhBerikut adalah gangguan dari artikel ini dan perkenalkan apa nilai aslinya:
Dalam JavaScript, variabel dapat menyimpan dua jenis nilai, yaitu nilai asli dan nilai referensi.
1. Nilai primitif:
Nilai asli adalah nilai tetap dan sederhana, yang merupakan segmen data sederhana yang disimpan dalam tumpukan, yaitu nilainya secara langsung disimpan di lokasi di mana variabel diakses.
Ada lima jenis tipe primitif: tidak terdefinisi, nol, boolean, angka, string.
2. Nilai referensi:
Nilai referensi adalah objek yang relatif besar, objek yang disimpan dalam tumpukan tumpukan, yaitu nilai yang disimpan pada variabel adalah pointer pointer yang menunjuk ke memori di mana objek disimpan. Semua jenis referensi terintegrasi dari objek.
Masalah kinerja rantai prototipe
Jika atribut yang dapat ditemukan terletak di bagian atas rantai prototipe, proses pencarian pasti akan memiliki dampak negatif pada kinerja. Ini akan menjadi pertimbangan utama ketika dalam skenario di mana persyaratan kinerja diperlukan. Selain itu, mencoba menemukan properti yang tidak ada akan melintasi seluruh rantai prototipe.
Demikian pula, saat melintasi sifat objek, semua properti pada rantai prototipe akan diakses.
Meringkaskan
Memahami prototipe warisan adalah prasyarat untuk menulis kode javascript yang lebih kompleks, dan Anda juga harus memperhatikan ketinggian rantai prototipe dalam kode. Saat menghadapi kemacetan kinerja, Anda harus belajar membagi rantai prototipe. Selain itu, untuk membedakan prototipe objek prototipe dari prototipe __proto__, kami terutama akan membahas prototipe objek prototipe di sini, dan kami tidak akan menjelaskan masalah tentang prototipe __proto__.