Sebelum berbicara tentang rantai prototipe, kita harus terlebih dahulu memahami apa hubungan antara fungsi dan fungsi khusus, dan apa hubungan yang tak terpisahkan antara konstruktor, prototipe dan instance? Faktanya, semua fungsi adalah contoh fungsi. Ada prototipe properti prototipe pada konstruktor, yang juga merupakan objek; Lalu ada properti konstruktor pada objek prototipe, yang menunjuk ke konstruktor; Dan ada properti _proto_ pada objek instan, yang juga menunjuk pada objek prototipe, dan properti ini bukan properti standar dan tidak dapat digunakan dalam pemrograman. Properti ini digunakan secara internal untuk penggunaan browser.
// _proto_ Ada prototipe properti dalam fungsi. Objek yang dibuat oleh fungsi ini akan terhubung ke properti secara default. // Hubungan antara prototipe dan _proto___ berasal dari perspektif objek, prototipe berasal dari perspektif konstruktor.
Di bawah ini, mari kita lihat gambarnya dan berbicara.
1. Hubungan antara konstruktor, prototipe dan instance
①+objek
②+Fungsi+Objek+Array
Setelah memahami ini, mari kita bahas apa itu rantai prototipe. Terus terang, sebenarnya rantai terbatas yang dibentuk antara objek instan yang terbatas dan prototipe, yang digunakan untuk mengimplementasikan atribut bersama dan warisan. Selanjutnya, mari kita lihat kode untuk berbicara.
var obj = objek baru (); Objek adalah objek prototipe dengan objek prototipe dan objek prototipe OBJ._PROTO _._ Proto _._ Proto _._ Proto__proTo_ Juga memiliki objek prototipe. Objek prototipe objek terus melihat ke atas dan Anda akan menemukan null // Contoh rantai prototipe var arr = []; arr -> array.prototype -> object.prototype -> null var o = objek baru (); o -> object.prototype -> null; function foo1 () {this.name1 = '1';} function foo2 () {this.name2 = '2';} foo2.prototype = foo1 (); foo foo3 () {this.name = '3';} foo3.prototype = new foo2 (); var fOOO3 = '3';} foo3.prototype = new foo2 (); var fOOO3 = '3';Berikutnya adalah masalah warisan.
2. Warisan
1) Prototipe warisan
function hewan (name) {this.name = name; } function Tiger (warna) {this.color = color; } // var tiger = new Tiger ('yellow'); // console.log (tiger.color); // console.log (tiger.name); // tidak terdefinisi // tiger.prototype = hewan baru ('Tiger'); // One Way Object.prototype.name = 'Big Tiger'; // Cara kedua var Tiger = new Tiger ('yellow'); Console.log (Tiger.Color); Console.log (Tiger.name);Perlu dicatat bahwa ada dua masalah utama di sini: ① Tidak nyaman untuk meneruskan parameter ke jenis induk; ② Jenis referensi dalam jenis induk dibagikan oleh semua contoh
2) ES5 menyediakan metode objek.create () untuk mengimplementasikan warisan
――6 kompatibel // fungsi shim shim create (obj) {if (object.create) {return object.create (obj); } else {function foo () {} foo.prototype = obj; mengembalikan foo baru (); }}Metode ini adalah fitur baru ES5, yang sebenarnya menyalin dan mewarisi.
3) Salin warisan
var obj = {}; obj.extend = function (obj) {for (var k dalam obj) {this [k] = obj [k]; }}4) pinjaman pinjaman warisan - anggota pada prototipe dalam konstruktor yang dipinjam tidak dipinjam
function hewan (name) {this.name = name;} function mouse (nickName) {animal.call (this, 'mouse'); this.nickname = nickName;} var m = mouse baru ('jerry'); console.log (m.name); console.log (m.nickname);Masalah yang ada: Ini dapat memecahkan masalah parameter lewat dalam pewarisan prototipe, tetapi anggota (atribut dan metode) pada objek prototipe dalam jenis induk tidak dapat diwariskan
5) Objek kombinasi warisan-prototipe adalah dinamis
function person (name) {this.name = name;} person.prototype.showname = function () {console.log (this.name);} function siswa (nama, usia) {person.call (ini, nama); this.age = usia;} student.prototype = orang baru (); student.prototype.contructor = student; student.prototype.showage = function () {console.log (this.age);} var stu = siswa baru ('zhang san', 12); stu.showname (); stu.[Prototipe Warisan + Pinjam Konstruktor Warisan] Karakteristiknya adalah bahwa satu salinan atribut per instance, dan metode ini dibagikan
[Ringkasan] Untuk memasukkannya ke dalam kalimat yang sangat kasar, rantai prototipe yang disebut adalah cara perilaku menemukan seorang ibu, dan dapat dipahami bahwa manusia dilahirkan oleh manusia, dan setan dilahirkan oleh setan. Sebenarnya hanya ada satu inti dari rantai prototipe: berbagi atribut dan kontrol independen. Ketika instance objek Anda membutuhkan atribut independen, esensi dari semua praktik adalah membuat atribut dalam instance objek. Jika Anda tidak terlalu berpikir, Anda dapat secara langsung mendefinisikan atribut independen yang Anda butuhkan secara langsung untuk menimpa sifat prototipe. Singkatnya, saat menggunakan prototipe warisan, Anda harus memberikan perhatian khusus pada atribut dalam prototipe, karena mereka semua adalah keberadaan yang mempengaruhi seluruh tubuh. Metode yang paling umum sekarang adalah mode kombinasi.
1. Rantai prototipe
1) Hubungan antara konstruktor, prototipe dan instance
① Konstruktor memiliki prototipe properti, yang merupakan objek (contoh suatu objek). ② Objek prototipe memiliki atribut konstruktor, yang menunjuk pada fungsi konstruktor yang dimiliki oleh objek prototipe. ③ Objek instan memiliki atribut _proto_, yang juga menunjuk pada objek prototipe konstruktor. Ini adalah properti non-standar dan tidak dapat digunakan untuk pemrograman. Ini digunakan oleh browser itu sendiri. 2) Hubungan antara prototipe dan _proto_
① Prototipe adalah properti dari konstruktor
②_proto_ adalah atribut dari objek instance
- keduanya menunjuk ke objek yang sama
[Ringkasan] i) Fungsi juga merupakan objek, dan objek tidak harus berfungsi;
ii) esensi suatu objek: satu set pasangan nilai kunci yang tidak tertib; Nilai-nilai dalam pasangan nilai kunci dapat berupa nilai dari tipe data apa pun
iii) Objek adalah wadah, dan wadah berisi (properti dan metode)
3) Pencarian atribut
① Saat mengakses anggota objek, pertama -tama Anda akan mencari apakah itu ada di objek.
②Jika tidak ada objek saat ini, cari di objek prototipe konstruktor
③Jika objek prototipe tidak ditemukan, cari prototipe objek prototipe
④ ketahuilah bahwa prototipe objek objek objek adalah nol
2. Fungsi
- Semua fungsi adalah contoh fungsi
① Objek lokal: Objek terlepas dari lingkungan host (browser) - termasuk objek, array, tanggal, regexp, fungsi, kesalahan, angka, string, boolean
② Objek bawaan - termasuk matematika dan global (jendela, yang merupakan variabel global dalam JS), dan baru tidak diperlukan saat menggunakannya.
③ Objek HOST - termasuk objek kustom, dom, bom
Di atas adalah deskripsi lengkap tentang cara memahami rantai prototipe JS yang diperkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!