Sebelum melakukan sesuatu, Anda harus terlebih dahulu tentang manfaat melakukannya. Saya percaya bahwa tidak ada yang mau melakukan sesuatu tanpa alasan. Secara umum, ketika kami merancang kelas, kami benar -benar berharap dapat mengurangi duplikasi kode. Menggunakan warisan dapat melakukan ini dengan sempurna. Dengan bantuan mekanisme warisan, Anda dapat merancang lagi berdasarkan kelas yang ada dan memanfaatkan berbagai metode yang sudah mereka miliki, dan memodifikasi desain dengan lebih mudah. Saya tidak akan mengatakan banyak omong kosong, berikan contoh:
Salinan kode adalah sebagai berikut:
function person (name) {
this.name = name;
}
Person.prototype.getName = function () {
kembalikan nama ini;
}
Function Bloger (Name, Blog) {
Person.call (ini, nama);
this.blog = blog;
}
var bloger = bloger baru ("zhen", "// www.vevb.com");
peringatan (bloger.name == "zhenn"); /*Kembali ke Ture*/
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "zhenn"); /*Tip "bloger.getName bukan fungsi"*/
Dari contoh di atas, kita dapat melihat bahwa bloger secara dinamis memanggil properti asli dan metode orang kelas induknya melalui panggilan di dalamnya (untuk penjelasan panggilan, silakan merujuk ke //www.vevb.com/article/62086.htm), yang dapat dipahami sebagai orang bloger warisan dan menjadi subclass dari itu. Namun, siswa yang hati -hati akan menemukan bahwa metode dalam objek prototipe orang tidak dapat diwarisi dengan hanya mengandalkan panggilan, itulah sebabnya ia meminta "bloger.getname bukan fungsi". Tapi jangan khawatir, cukup berurusan dengan kode di atas untuk menyelesaikan masalah ini!
Salinan kode adalah sebagai berikut:
function person (name) {
this.name = name;
}
Person.prototype.getName = function () {
kembalikan nama ini;
}
Function Bloger (Name, Blog) {
Person.call (ini, nama);
this.blog = blog;
}
/*Harap perhatikan dua baris kode berikut*/
Bloger.prototype = orang baru ();
Bloger.prototype.constructor = bloger;
var bloger = bloger baru ("zhen", "// www.vevb.com");
peringatan (bloger.name == "zhenn"); /*Kembali ke Ture*/
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "zhenn"); /* prompt true*/
Di sini kita perlu menjelaskan dua baris kode ini. Kita tahu bahwa setiap konstruktor memiliki atribut prototipe, yang menunjuk pada objek prototipe konstruktor. Faktanya, objek prototipe juga merupakan objek instan, tetapi atribut dan metode yang ditentukan dalam objek prototipe dapat disediakan untuk semua objek instan untuk dibagikan. Dari sini, kita dapat melihat bahwa niat menambahkan dua baris kode adalah untuk mengatur objek prototipe subclass untuk menunjuk ke objek instantiated dari kelas induk, dan objek yang instantiated dari kelas induk akan mewarisi semua metode atribut prototipe dari kelas induk, yang mencapai tujuan kami. Prototipe subclass mewarisi sifat dan metode semua objek instance kelas induk.
Namun, Anda juga harus mencatat bahwa bloger.prototype.constructor = bloger; Baris kode ini, karena ketika prototipe subclass diatur ke instance dari kelas induk, atribut konstruktornya akan menunjuk ke kelas induk, sehingga konstruktor prototipe subclass perlu diatur untuk menunjuk ke subkelas lagi. Pada titik ini, warisan kelas JavaScript telah diterapkan dengan sempurna!
Untuk menyederhanakan deklarasi subkelas, seluruh proses memperluas subkelas dapat ditulis dalam fungsi yang disebut Extand, yaitu membuat kelas baru berdasarkan struktur kelas yang diberikan:
Salinan kode adalah sebagai berikut:
fungsi memperpanjang (anak -anak, orangtua) {
var f = fungsi baru ();
F.prototype = parentClass.prototype;
childclass.prototype = f () baru;
childclass.prototype.constructor = ChildClass;
}
Dengan fungsi perpanjangan ini, Anda dapat dengan mudah memperluas subkelas. Sebut saja fungsi ini. Dua baris kode yang ditambahkan di atas dapat diubah untuk diperluas (bloger, orang), yang juga dapat mencapai warisan lengkap!