__Proto__ adalah prototipe internal, dan prototipe adalah prototipe konstruktor (konstruktor sebenarnya adalah fungsi)
Prototipe konstruktor adalah objek
Jadi apa itu konstruktor?
Untuk membuat objek, Anda harus terlebih dahulu memiliki konstruktor objek, seperti di PHP. Untuk membuat objek, Anda harus terlebih dahulu memiliki kelas
Inti dari konstruktor adalah suatu fungsi. Pertanyaan berikut adalah: Bagaimana cara membuat objek melalui konstruktor ini?
Jawaban: Baru
Konstruktor membangun objek.
1. __Proto__ dari semua konstruktor/fungsi titik menjadi fungsi.prototype, yang merupakan fungsi kosong (fungsi kosong)
Salinan kode adalah sebagai berikut:
Angka .__ proto__ === Function.prototype
// BENAR
Boolean .__ proto__ === Function.prototype
// BENAR
String .__ proto__ === Function.prototype
// BENAR
Objek .__ proto__ === Function.prototype
// BENAR
Fungsi .__ proto__ === Function.prototype
// BENAR
Array .__ proto__ ===
Function.prototype
// BENAR
Regexp .__ proto__ === Function.prototype
// BENAR
Kesalahan .__ Proto__ ===
Function.prototype
// BENAR
Tanggal .__ Proto__ ===
Function.prototype
// BENAR
Ini menunjukkan bahwa angka dan konstruktor lainnya sebenarnya adalah objek fungsi. Dengan kata lain, itu setara dengan var number = function baru ();
Ada 12 konstruktor/objek bawaan di JavaScript (JSON baru ditambahkan dalam ES5), dan berikut adalah 8 konstruktor yang dapat diakses. Sisanya adalah bahwa global tidak dapat diakses secara langsung, argumen hanya dibuat oleh mesin JS ketika panggilan fungsi, matematika dan JSON ada dalam bentuk objek, tanpa baru. __Proto__ mereka adalah objek.prototype. sebagai berikut
Salinan kode adalah sebagai berikut:
Matematika .__ proto__ === Object.prototype
// BENAR
Json .__ proto__ === Object.prototype
// BENAR
"Semua konstruktor/fungsi" yang disebutkan di atas tentu termasuk yang kustom. sebagai berikut
Salinan kode adalah sebagai berikut:
// Deklarasi Fungsi
function person ()
{}
// Ekspresi fungsi
var man
=
fungsi()
{}
console.log (orang .__ proto__ === Function.prototype)
// BENAR
console.log (man .__ proto__ ===
Function.prototype)
// BENAR
Apa artinya ini?
Semua konstruktor berasal dari function.prototype, dan bahkan memasukkan objek dan fungsi konstruktor root itu sendiri. Semua konstruktor mewarisi sifat dan metode fungsi.prototype. Seperti panjang, panggilan, terapkan, ikat (ES5).
Function.prototype juga merupakan satu -satunya prototipe dengan tipe xxx.prototype sebagai "fungsi". Prototipe konstruktor lain adalah semua objek. sebagai berikut
Salinan kode adalah sebagai berikut:
Console.log (typeof function.prototype)
// fungsi
Console.log (Typeof Object.Prototype)
// objek
Console.log (typeof number.prototype)
// objek
Console.log (Typeof Boolean.Prototype)
// objek
console.log (typeof string.prototype)
// objek
Console.log (Typeof Array.Prototype)
// objek
Console.log (TypeOf RegExp.Prototype)
// objek
Console.log (typeof error.prototype)
// objek
Console.log (TypeOf Date.Prototype)
// objek
Console.log (Typeof Object.Prototype)
// objek
Oh, dan juga disebutkan di atas bahwa itu adalah fungsi kosong, lihatlah di bawah waspada (function.prototype).
Saya tahu bahwa semua konstruktor (termasuk built-in dan custom) adalah function.prototype, jadi siapa __proto__ fungsi.prototype?
Saya percaya semua orang telah mendengar bahwa fungsi dalam JavaScript juga warga negara kelas satu, jadi di mana mereka bisa tercermin? sebagai berikut
Salinan kode adalah sebagai berikut:
console.log (function.prototype .__ proto__ ===
Object.prototype)
// BENAR
Ini menunjukkan bahwa semua konstruktor juga merupakan objek JS biasa, dan mereka dapat menambahkan/menghapus atribut, dll. Untuk konstruktor. Pada saat yang sama, ia juga mewarisi semua metode pada objek.prototype: ToString, ValueOf, HasownProperty, dll.
Siapa __proto__ dari objek.prototype?
Salinan kode adalah sebagai berikut:
Object.prototype .__ proto__ ===
null //
BENAR
Sudah mencapai puncak, untuk nol.
Pernahkah Anda memahami perbedaan antara __proto__ dan prototipe dalam JavaScript? Jika Anda memiliki pertanyaan, tinggalkan pesan dan biarkan kami mendiskusikannya bersama