


ECMAScript hanya menyokong warisan pelaksanaan dan warisan pelaksanaannya bergantung terutamanya pada rantaian prototaip.
Rantai Prototaip
Idea asas rantaian prototaip ialah menggunakan prototaip untuk membenarkan satu jenis rujukan mewarisi sifat dan kaedah jenis rujukan yang lain. Setiap pembina mempunyai objek prototaip, objek prototaip mengandungi penunjuk kepada pembina, dan contoh mengandungi penunjuk kepada objek prototaip. Jika: kita menjadikan objek prototaip A sama dengan contoh lain jenis B, maka objek prototaip A akan mempunyai penunjuk yang menunjuk ke objek prototaip B, dan objek prototaip B yang sepadan menyimpan penunjuk kepada pembinanya. Jika objek prototaip B ialah contoh jenis lain, maka hubungan di atas masih dipegang, dan seterusnya, rantaian kejadian dan prototaip terbentuk.
Rajah hubungan antara kejadian dan pembina dan prototaip adalah seperti berikut:
person.constructor kini menunjuk ke Parent Ini kerana Child.prototype menghala ke prototaip Parent, dan pembina objek prototaip Parent menghala ke Parent.
Apabila mengakses sifat instance dalam mod baca, harta tersebut akan dicari terlebih dahulu dalam contoh tersebut. Dalam penyepaduan melalui rantaian prototaip, carian diteruskan ke atas rantai sehingga penghujung rantai dicapai.
Contohnya, semasa memanggil kaedah person.getParentValue(), 1) cari instance; 2) cari Child.prototype; 3) cari Parent.prototype;
1. Prototaip lalai
Rantai prototaip yang ditunjukkan dalam contoh sebelumnya tiada pautan Semua jenis rujukan mewarisi Objek secara lalai, dan warisan ini juga dilaksanakan melalui rantaian prototaip. Oleh itu, prototaip lalai mengandungi penuding dalaman yang menunjuk ke Object.prototype, yang merupakan sebab asas mengapa semua jenis tersuai mewarisi kaedah lalai seperti toString() dan ValueOf(). Dalam erti kata lain Object.prototype ialah penghujung rantai prototaip.
2. Tentukan hubungan antara prototaip dan contoh
Hubungan antara prototaip dan contoh boleh ditentukan dalam dua cara Yang pertama ialah menggunakan operator instanceOf, dan yang kedua ialah menggunakan kaedah isPrototypeOf().
Pembina yang muncul dalam rantaian prototaip instanceOf semuanya akan kembali benar
console.log(person instanceOf Child);//true console.log(person instanceOf Parent);//true console.log(person instanceOf Object);//true isPrototype(),只要是原型链中出现过的原型,都可以说是该原型链所派生出来的实例的原型,因此也返回true. console.log(Object.prototype.isPrototypeOf(instance));//true console.log(Parent.prototype.isPrototypeOf(instance));//true console.log(Child.prototype.isPrototypeOf(instance));//true
3. Tentukan kaedah dengan teliti
Subjenis kadangkala perlu mengatasi kaedah dalam supertype, atau menambah kaedah yang tidak wujud dalam supertype Nota: kod untuk menambah kaedah pada prototaip mesti diletakkan selepas pernyataan yang menggantikan prototaip.
Apabila getParentValue() dipanggil melalui tika Anak, kaedah yang ditakrifkan semula ini dipanggil, tetapi apabila getParentValue() dipanggil melalui tika Parent, kaedah asal dipanggil.
Adalah penting untuk ambil perhatian bahawa kedua-dua kaedah ini mesti ditakrifkan selepas contoh Induk menggantikan prototaip.
Satu lagi perkara yang memerlukan perhatian khusus ialah: apabila melaksanakan pewarisan melalui rantaian prototaip, anda tidak boleh menggunakan literal objek untuk mencipta kaedah prototaip, kerana berbuat demikian akan menimpa rantaian prototaip.
Kod di atas hanya memberikan contoh Induk kepada objek prototaip Child, dan kemudian menggantikan prototaip dengan literal Selepas menggantikannya dengan literal, prototaip Kanak-kanak sebenarnya mengandungi contoh Objek dan bukannya Contoh Induk. , jadi rantaian prototaip yang kami bayangkan terputus Tiada kaitan antara Ibu Bapa dan Anak.
4 Masalah dengan rantai prototaip
Rantai prototaip sangat berkuasa dan boleh digunakan untuk melaksanakan pewarisan, tetapi terdapat juga beberapa masalah Masalah utama ialah sifat prototaip yang mengandungi nilai jenis rujukan akan dikongsi oleh semua keadaan. Jadi kami mentakrifkan sifat contoh dalam pembina. Tetapi apabila pewarisan dilaksanakan melalui prototaip, objek prototaip sebenarnya menjadi contoh jenis lain. Jadi sifat contoh yang asalnya ditakrifkan dalam pembina menjadi sifat prototaip.
Contohnya adalah seperti berikut:
Atribut rakan ditakrifkan dalam pembina Induk, dan nilai atribut ialah tatasusunan (nilai jenis rujukan). Dengan cara ini, setiap tika Ibu Bapa akan mengandungi atribut rakannya sendiri. Apabila Anak mewarisi Ibu Bapa melalui rantai prototaip, Child.prototype juga menggunakan atribut rakan - ia seolah-olah atribut rakan ditakrifkan dalam Child.prototype. Dengan cara ini, semua kejadian Kanak-kanak akan berkongsi atribut rakan, jadi pengubahsuaian yang kami buat pada kid1.friends juga akan ditunjukkan dalam kid2.friends Jelas sekali, ini bukan yang kami mahu.
Satu lagi masalah dengan rantaian prototaip ialah apabila mencipta tika subjenis, anda tidak boleh menghantar parameter kepada pembina superjenis tanpa menjejaskan semua tika objek. Oleh itu, kami jarang menggunakan rantai prototaip sahaja.
pinjam pembina
Untuk menyelesaikan beberapa masalah yang disebabkan oleh mengandungi nilai jenis rujukan dalam prototaip, teknologi peminjam pembina telah diperkenalkan. Idea asas teknik ini adalah untuk memanggil pembina supertype di dalam pembina subjenis.
Parent.call(this) memanggil pembina Ibu Bapa dalam konteks tika Anak yang baru dibuat. Panggil pembina Ibu Bapa dalam konteks contoh Anak yang baru dibuat. Dengan cara ini, kod permulaan objek yang ditakrifkan dalam fungsi Parent() dilaksanakan pada objek Kanak-kanak baharu, objek kid1 dan kid2 di sini. Dengan cara ini, setiap contoh Kanak-kanak akan mempunyai salinan harta rakannya sendiri.
Dengan meminjam pembina, parameter boleh dihantar kepada pembina supertype dalam pembina subjenis.
Untuk memastikan bahawa kebiasaan subjenis tidak akan ditindih oleh pembina kelas induk, anda boleh menambah sifat subjenis selepas memanggil pembina kelas induk.
Masalah pembina:
Masalah dengan corak pembina ialah semua kaedah ditakrifkan dalam pembina, dan penggunaan semula fungsi adalah mustahil, oleh itu, corak yang meminjam pembina jarang digunakan secara bersendirian.
Pusaka gabungan
Warisan gabungan merujuk kepada menggabungkan teknik rantaian prototaip dan pembina peminjaman untuk memanfaatkan yang terbaik daripada kedua-dua dunia. Iaitu: menggunakan rantai prototaip untuk mencapai pewarisan sifat dan kaedah prototaip, dan meminjam pembina untuk mencapai pewarisan sifat contoh.
Le constructeur Person définit deux attributs : nom et amis. Le prototype de Person définit une méthode sayName(). Lorsque le constructeur Child appelle le constructeur Parent, il transmet le paramètre name, puis définit son propre attribut age. Attribuez ensuite l'instance Person au prototype Child, puis définissez la méthode sayAge() sur le prototype. De cette façon, deux instances Child différentes ont leurs propres attributs, y compris les attributs de type référence, et peuvent utiliser la même méthode.
La combinaison de l'héritage évite les défauts des chaînes de prototypes et des constructeurs, combine leurs avantages et devient le modèle d'héritage le plus couramment utilisé en JavaScript. De plus, instanceOf et isPropertyOf() peuvent également reconnaître les objets créés sur la base d'un héritage combiné.
Enfin, il existe encore plusieurs modes qui n'ont pas été écrits sur les objets JS et l'héritage. En d'autres termes, je ne les ai pas étudiés en profondeur moi-même. Cependant, je pense que je peux d'abord appliquer le mode combinaison. De plus, vous devez savoir pourquoi vous choisissez le mode combinaison et pourquoi.
Concernant plusieurs façons d'implémenter l'héritage en JavaScript (recommandé), l'éditeur vous le présentera ici, j'espère que cela vous sera utile !

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma