Artikel ini adalah sebahagian daripada siri Web Dev Tech dari Microsoft. Terima kasih kerana menyokong rakan kongsi yang membuat SitePoint mungkin.
Banyak kawan saya adalah pemaju C# atau C. Mereka digunakan untuk menggunakan warisan dalam projek mereka dan apabila mereka ingin belajar atau menemui JavaScript, salah satu soalan pertama yang mereka tanya ialah: "Tetapi bagaimana saya boleh melakukan warisan dengan JavaScript?"Sebenarnya, JavaScript menggunakan pendekatan yang berbeza daripada C# atau C untuk membuat bahasa berorientasikan objek. Ia adalah bahasa berasaskan prototaip. Konsep prototaip menunjukkan bahawa tingkah laku boleh digunakan semula dengan mengkloning objek sedia ada yang berfungsi sebagai prototaip. Setiap objek dalam JavaScript decends dari prototaip yang mentakrifkan satu set fungsi dan ahli yang boleh digunakan oleh objek. Tiada kelas. Hanya objek. Setiap objek kemudian boleh digunakan sebagai prototaip untuk objek lain.
Konsep ini sangat fleksibel dan kita boleh menggunakannya untuk mensimulasikan beberapa konsep dari OOP seperti warisan.
Melaksanakan warisan
Pertama sekali, kita boleh membuat kelas dengan mudah. Kerana tidak ada kelas yang eksplisit, kita dapat menentukan satu set tingkah laku (kelas begitu ...) dengan hanya membuat fungsi seperti ini:
"Kelas" ini boleh dimanfaatkan menggunakan kata kunci baru:
<span>var <span>ClassA</span> = function() { </span> <span>this.name = "class A"; </span><span>}</span>
dan menggunakannya menggunakan objek kami:
<span>var a = new ClassA(); </span><span>ClassA.prototype.print = function() { </span> <span>console.log(this.name); </span><span>}</span>
Cukup mudah, betul?
a<span>.print();</span>
Sampel lengkap hanya 8 baris panjang:
Sekarang mari kita tambahkan alat untuk membuat "warisan" antara kelas. Alat ini hanya perlu melakukan satu perkara: klon prototaip:
var ClassA = function() { this.name = "class A"; } ClassA.prototype.print = function() { console.log(this.name); } var a = new ClassA(); a<span>.print();</span>
Ini betul -betul di mana sihir berlaku! Dengan mengkloning prototaip, kami memindahkan semua ahli dan berfungsi ke kelas baru.
<span>var inheritsFrom = function (child<span>, parent</span>) { </span> child<span>.prototype = Object.create(parent.prototype); </span><span>};</span>
jadi jika kita mahu menambah kelas kedua yang akan menjadi anak yang pertama, kita hanya perlu menggunakan kod ini:
<span>var <span>ClassA</span> = function() { </span> <span>this.name = "class A"; </span><span>}</span>
Kemudian kerana ClassB mewarisi fungsi cetak dari Classa, kod berikut berfungsi:
<span>var a = new ClassA(); </span><span>ClassA.prototype.print = function() { </span> <span>console.log(this.name); </span><span>}</span>
dan menghasilkan output berikut:
a<span>.print();</span>
kita juga boleh mengatasi fungsi cetak untuk ClassB:
var ClassA = function() { this.name = "class A"; } ClassA.prototype.print = function() { console.log(this.name); } var a = new ClassA(); a<span>.print();</span>
Dalam kes ini, output yang dihasilkan akan kelihatan seperti ini:
<span>var inheritsFrom = function (child<span>, parent</span>) { </span> child<span>.prototype = Object.create(parent.prototype); </span><span>};</span>
Trik di sini adalah untuk panggilan classa.prototype untuk mendapatkan fungsi cetak asas. Kemudian terima kasih kepada fungsi panggilan kita boleh memanggil fungsi asas pada objek semasa (ini).
Membuat classc kini jelas:
<span>var <span>ClassB</span> = function() { </span> <span>this.name = "class B"; </span> <span>this.surname = "I'm the child"; </span><span>} </span> <span>inheritsFrom(ClassB, ClassA);</span>
dan output adalah:
<span>var b = new ClassB(); </span>b<span>.print();</span>
Ia mungkin mengejutkan anda sedikit, tetapi Microsoft mempunyai banyak pembelajaran percuma di banyak topik JavaScript sumber terbuka dan kami berada dalam misi untuk membuat lebih banyak lagi dengan Projek Spartan yang akan datang. Lihat saya sendiri:
atau siri pembelajaran pasukan kami:
dan beberapa alat percuma: Komuniti Visual Studio, Percubaan Azure, dan Alat Ujian Cross-Browser untuk Mac, Linux, atau Windows.
untuk membuat kesimpulan, saya hanya ingin menyatakan dengan jelas bahawa JavaScript bukan C# atau c. Ia mempunyai falsafah sendiri. Jika anda adalah pemaju C atau C# dan anda benar -benar ingin merangkul kuasa penuh JavaScript, tip terbaik yang boleh saya berikan ialah: Jangan cuba meniru bahasa anda ke dalam JavaScript. Tidak ada bahasa terbaik atau terburuk. Hanya falsafah yang berbeza!
Artikel ini adalah sebahagian daripada siri Web Dev Tech dari Microsoft. Kami teruja untuk berkongsi Projek Spartan dan enjin rendering baru dengan anda. Dapatkan mesin maya percuma atau ujian dari jauh pada peranti Mac, iOS, Android, atau Windows anda di Modern.ie.
Fungsi dalam JavaScript adalah objek, dan mereka boleh digunakan untuk melaksanakan warisan. Ini dilakukan dengan menentukan fungsi pembina, yang digunakan untuk membuat objek baru. Properti 'prototaip' fungsi pembina adalah objek yang semua contoh fungsi akan mewarisi dari. Dengan menambahkan sifat dan kaedah ke objek prototaip ini, anda boleh menjadikannya tersedia untuk semua contoh fungsi. kekeliruan antara rantaian prototaip dan rantaian pembina. Apabila kaedah dipanggil pada objek, JavaScript melihat rantai prototaip, bukan rantai pembina. Satu lagi perangkap adalah lupa untuk memanggil pembina induk dalam pembina kanak -kanak, yang boleh membawa kepada hasil yang tidak dijangka. Akhirnya, kerana JavaScript menggunakan warisan prototip, mungkin secara tidak sengaja mengubahsuai prototaip apabila anda bermaksud mengubah suai contoh.
Atas ialah kandungan terperinci Warisan sederhana dengan javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!