Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang __proto__ dan prototaip dalam javascript_Pengetahuan asas

Penjelasan terperinci tentang __proto__ dan prototaip dalam javascript_Pengetahuan asas

WBOY
Lepaskan: 2016-05-16 16:30:29
asal
1281 orang telah melayarinya

__proto__ ialah prototaip dalaman, prototaip ialah prototaip pembina (pembina sebenarnya adalah fungsi)

Prototaip pembina ialah objek

Jadi apakah itu pembina?
Jika anda ingin mencipta objek, anda mesti mempunyai pembina objek, sama seperti dalam PHP Jika anda ingin mencipta objek, anda mesti mempunyai kelas
dahulu Intipati pembina ialah fungsi Soalan berikut ialah: Bagaimana untuk mencipta objek melalui pembina ini?
Jawapan: baru

Pembina membina objek.
1. __proto__ semua pembina/fungsi menghala ke Function.prototype, iaitu fungsi kosong (Fungsi kosong)

Salin kod Kod adalah seperti berikut:

Nombor.__proto__ === Fungsi.prototaip
// benar
Boolean.__proto__ === Function.prototype
// benar
String.__proto__ === Function.prototype
// benar
Objek.__proto__ === Fungsi.prototaip
// benar
Fungsi.__proto__ === Fungsi.prototaip
// benar
Array.__proto__ ===
Fungsi.prototaip
// benar
RegExp.__proto__ === Function.prototype
// benar
Ralat.__proto__ ===
Fungsi.prototaip
// benar
Tarikh.__proto__ ===
Fungsi.prototaip
// benar

menerangkan bahawa Nombor dan seterusnya adalah semua pembina, dan pembina ini sebenarnya adalah objek Fungsi. Dalam erti kata lain, ia bersamaan dengan var Number = new Function();

Terdapat sejumlah 12 pembina/objek terbina dalam dalam JavaScript (JSON baru ditambahkan dalam ES5. Berikut ialah 8 pembina yang boleh diakses). Selebihnya seperti Global tidak boleh diakses secara langsung, Argumen hanya dicipta oleh enjin JS apabila fungsi dipanggil, Math, JSON wujud dalam bentuk objek, tiada yang baru diperlukan. __proto__ mereka ialah Object.prototype. Seperti berikut

Salin kod Kod adalah seperti berikut:

Matematik.__proto__ === Objek.prototaip
// benar
JSON.__proto__ === Object.prototype
// benar

"semua pembina/fungsi" yang dinyatakan di atas pastinya termasuk yang tersuai. Seperti berikut

Salin kod Kod adalah seperti berikut:

// Pengisytiharan fungsi
fungsi Orang()
{}
// Ungkapan fungsi
var Lelaki
=
fungsi()
{}
console.log(Person.__proto__ === Function.prototype)
// benar
console.log(Man.__proto__ ===
Fungsi.prototaip)
// benar

Apakah maksudnya?

Semua pembina datang daripada Function.prototype, malah Pembina akar Objek dan Fungsi itu sendiri. Semua pembina mewarisi sifat dan kaedah Function.prototype. Seperti panjang, panggil, guna, ikat (ES5).

Fungsi.prototaip juga merupakan satu-satunya prototaip yang jenis prototaip XXX ialah "fungsi". Prototaip pembina lain ialah objek. Seperti berikut

Salin kod Kod adalah seperti berikut:

console.log(typeof Function.prototype)
// fungsi
console.log(jenis Objek.prototaip)
// objek
console.log(typeof Number.prototype)
// objek
console.log(jenis Boolean.prototaip)
// objek
console.log(jenis String.prototaip)
// objek
console.log(jenis Array.prototaip)
// objek
console.log(jenis RegExp.prototaip)
// objek
console.log(typeof Error.prototype)
// objek
console.log(jenis Tarikh.prototaip)
// objek
console.log(jenis Objek.prototaip)
// objek

Oh, ia juga disebut di atas bahawa ia adalah fungsi kosong, mari kita lihat alert(Function.prototype).

Kami tahu bahawa __proto__ semua pembina (termasuk terbina dalam dan tersuai) ialah Function.prototype, jadi siapakah __proto__ Function.prototype?

Saya percaya anda semua pernah mendengar bahawa fungsi dalam JavaScript juga merupakan warga kelas pertama, jadi bagaimana anda boleh menunjukkan ini? Seperti berikut

Salin kod Kod adalah seperti berikut:

console.log(Function.prototype.__proto__ ===
Objek.prototaip)
// benar

Ini menunjukkan bahawa semua pembina juga merupakan objek JS biasa, dan atribut boleh ditambah/dialih keluar pada pembina. Pada masa yang sama, ia juga mewarisi semua kaedah pada Object.prototype: toString, valueOf, hasOwnProperty, dsb.

Siapakah __proto__ Object.prototype?

Salin kod Kod adalah seperti berikut:

Object.prototype.__proto__ ===
null //
benar

Ia telah sampai ke puncak dan adalah batal.

Adakah anda mempunyai sedikit pemahaman tentang perbezaan antara __proto__ dan prototaip dalam javascript Jika anda mempunyai sebarang soalan, sila tinggalkan mesej dan mari kita bincangkannya bersama

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan