Baru -baru ini saya melihat perpustakaan JS yang ditulis oleh orang lain. Tiba -tiba saya punya beberapa ide tentang prototipe dan warisan di JS. Saya telah melihat beberapa dari mereka sebelumnya, tetapi mereka tidak terlalu jelas. Saya menggunakan waktu luang saya hari ini untuk memahami area ini, dan saya masih merasa ada yang salah dengan itu. Idenya tidak begitu terorganisir, hanya untuk berbagi.
1. Contoh
Dalam JavaScript, ada contoh operator, yang merupakan operator biner. Gunakan metode Instancea dari a, dan nilai pengembalian adalah boolean, yang berarti menentukan apakah Instancea adalah instance dari A, dan esensinya adalah untuk menentukan apakah a.prototype === Instancea .__ Proto__, seperti
fungsi f2 () {var f = function () {} var test = new f (); console.log (test instance f); // true console.log ((f.prototype ==== tes .__ proto __)); // true}Kedua cetakan di atas itu benar. Menunjukkan bahwa tes adalah instance dari F; Atribut __proto__ dari titik uji ke objek prototipe F, yaitu, properti prototipe F adalah objek, dan objek ini merupakan instance dari f.
2. Objek di JS
Semuanya adalah objek di JS. Objek dibagi menjadi objek fungsi dan objek biasa. Fungsi umum sebenarnya adalah objek fungsi, seperti
// Objek Fungsi var f = function () {} var f2 = Fungsi baru ('str', 'console.log (str)') fungsi f3 () {} // objek biasa var o = objek baru (); var o2 = {} var o3 = new f ()Seperti yang ditunjukkan di atas, F, F2, dan F3 adalah objek fungsi, dan O, O2, dan O3 adalah objek biasa.
Perbedaan antara objek fungsi dan objek normal:
Semua objek yang dibuat menggunakan fungsi baru () adalah objek fungsi, F dan F3, dan pada akhirnya mereka juga dibuat menggunakan fungsi baru ();
Saat mendefinisikan suatu objek, objek berisi beberapa sifat yang telah ditentukan, seperti prototipe dan __proto__. Atribut prototipe hanya tersedia dalam objek fungsi, dan __proto__ tersedia untuk semua objek. Oleh karena itu, dapat ditentukan oleh atribut __proto__ objek dari objek untuk menentukan apakah suatu objek adalah objek fungsi atau objek normal, seperti
// Objek Fungsi var f = function () {} // Objek biasa var o = objek baru (); console.log (f.prototype); // objek {} console.log (o.prototype); // tidak ditentukanDari yang di atas, kita dapat menemukan bahwa objek fungsi memiliki atribut prototipe, sedangkan objek prototipe objek biasa tidak ditentukan.
3. Rantai prototipe
Dari hal di atas, kita tahu bahwa semua objek memiliki atribut __proto__, yang menunjuk pada prototipe objek prototipe dari objek fungsi yang membuatnya. Kami menyebut rantai ini string menggunakan atribut __proto__ sebagai rantai prototipe, seperti berikut ini adalah rantai prototipe.
Gambar di atas, mengambil orang sebagai contoh, menggambarkan rantai prototipe.
var person = function () {} var person1 = orang baru ();1. Orang adalah objek fungsi, orang1 adalah contoh orang
2. Atribut __proTo__ dari Person1 adalah objek prototipe orang.prototype
3. Karena prototipe objek Prototipe orang. Prototype adalah objek, ia juga memiliki atribut __proTo__, yang menunjuk ke objek objek prototipe. Prototype
4. Object's Prototipe Object Object.Prototype adalah objek, yang juga memiliki atribut __proto__, dan objek prototipe atribut ini adalah nol.
4. Beberapa warisan
Di JS kita akan mendefinisikan objek fungsi, seperti
var person = function () {}Di atas kami mendefinisikan objek fungsi, yang tidak memiliki sifat dan merupakan objek kosong. Karena ini adalah objek, Anda dapat menambahkan properti ke dalamnya.
var person = function () {} person.name1 = 'js'console.log (person.name1) // jsKode di atas telah menambahkan atribut nama untuk orang, dan menetapkan nilai ke JS, dan nilai atribut nama dapat dicetak.
Tetapi ketika kita membuat instance dari orang1, sebagai berikut
var person = function () {}; person.name1 = 122; console.log (person.name1); var person1 = orang baru (); console.log (person1.name1); // tidak ditentukanAnda dapat melihat bahwa orang1 tidak memiliki atribut name1, jadi bagaimana kami dapat memastikan bahwa orang juga memiliki atribut name1?
var person = function () {}; person.name1 = 122; // Gunakan objek prototipe untuk menambahkan atribut ke objek, sehingga instance akan memiliki atribut ini orang.prototype.name1 = '12 '; console.log (person.name1); var person1 = orang baru (); console.log (person1.name1); // 12Di atas, orang.protoype.name1 = '12 'digunakan, sehingga semua contoh memiliki atribut name1. Atribut yang ditambahkan dengan cara ini akan dianggap sebagai atribut umum dari instance ketika menghasilkan instance.
Artikel di atas didasarkan pada prototipe dan warisan di JS. Semua konten yang saya bagikan dengan Anda adalah editor. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.