Tak perlu dikatakan, metode ini relatif mudah dipahami, memanggil konstruktor kelas induk di subkelas. Selain itu, salah satu keunggulan terbesar dari metode ini adalah bahwa membangun warisan dapat mencapai warisan berganda. Tinjau kode ini:
Salinan kode adalah sebagai berikut:
Fungsi A ()
{}
Fungsi B ()
{}
fungsi c ()
{
this.father = a;
this.father ();
Hapus ini. Ayah;
this.father = b;
this.father ();
Hapus ini. Ayah;
}
Tetapi metode ini juga memiliki ini dan kerugian itu:
Jika Anda terbiasa dengan berorientasi objek, mari kita lihat kode C# ini:
Salinan kode adalah sebagai berikut:
Program Kelas
{
staticvoid main (string [] args)
{
B b = newB ();
bool temp = (typeof (a)). isInstanceOfType (b);
Console.WriteLine (TEMP);
}
}
classa
{
PUBLIK A ()
{
}
}
classb: a
{
publik b ()
{
}
}
Apa hasilnya? B tentu saja merupakan contoh dari:
Namun, kami melakukan tes ini pada bagian di atas dari kode JavaScript yang diwarisi menggunakan konstruk:
Salinan kode adalah sebagai berikut:
Fungsi A ()
{}
Fungsi B ()
{}
fungsi c ()
{
this.father = a;
this.father ();
Hapus ini. Ayah;
this.father = b;
this.father ();
Hapus ini. Ayah;
}
var c = c () baru;
Peringatan (C Instance dari A);
Tetapi hasilnya bukan yang kami bayangkan:
Bahkan, mudah dijelaskan: warisan yang dibangun hanyalah properti dari kelas induk yang disalin dengan memanggil metode konstruksi kelas induk. Tidak ada pencarian lain yang dilakukan, sehingga banyak bahan yang tidak menyebut warisan metode warisan ini.
Saat melihat kekurangan, ingat keuntungannya: mendukung lebih banyak warisan.
Ketika kami melihat warisan C#, kami menemukan bahwa ada dua perbedaan paling khas dari warisan ini: C# tidak mendukung warisan berganda, dan kerugian dari warisan konstruktif yang saya sebutkan di atas. Jadi metode warisan baru dibuat, dan kami menjadi prototipe warisan.
Ketika Anda melihat namanya, Anda dapat secara kasar memahami bahwa pewarisan prototipe adalah menggunakan karakteristik prototipe untuk mencapai warisan. Ini adalah cara warisan paling populer di JavaScript. Jika Anda tidak memahami prototipe, harap perhatikan artikel saya yang lain: "Bermain dengan prototipe - prototipe".
Mari kita lihat kode terlebih dahulu. Di sini, saya akan menggambar pada sepotong kode dari "The Return of the King of JavaScript":
Salinan kode adalah sebagai berikut:
titik fungsi (dimensi)
{
this.Dimensional = dimensi;
this.test = function () {
alert ("Success");
}
}
fungsi point2d (x, y)
{
this.x = x;
this.y = y;
}
Point2d.prototype = titik baru (2);
var p = point2d baru (3,4);
p.test ();
Tes lulus. Ini menunjukkan bahwa Point2D telah mewarisi metode kelas induk, dan kemudian melihat instance.
waspada (p instance dari titik);
kesuksesan! Oke, mari kita analisis prototipe warisan:
Saya tidak akan berbicara tentang keunggulan warisan prototipe. Strukturnya sederhana, mudah dimengerti, dan dapat dipasang. Tetapi kekurangannya juga signifikan. Apakah Anda ingat contoh saya sebelumnya tentang hewan, orang, dan perempuan? Kami menggunakan prototipe warisan untuk mengimplementasikan yang berikut:
Salinan kode adalah sebagai berikut:
fungsi hewan ()
{
this.run = function () {alert ("I Can Run");};
}
Fungsi Orang (Nama)
{
this.say = function () {alert ("nama saya"+this.name);}
}
People.prototype = hewan baru ();
Function Girl (nama, usia)
{
this.age = usia;
this.introduce = function () {alert ("nama saya adalah"+this.name+". I am"+this.age);};
}
Girl.prototype = orang baru (???);
Harap perhatikan baris kode di bagian tebal merah saya. Orang adalah prototipe gadis. Jadi ketika kita menginisialisasi orang, kita harus melewati parameter nama, tetapi nama masing -masing gadis berbeda, jadi tidak ada penggunaan prototipe warisan: pada tahap prototipe warisan, Anda tidak dapat menentukan parameter mana yang akan digunakan untuk menginisialisasi objek kelas induk. Acara 2: Sangat sederhana. Setiap kelas hanya dapat memiliki satu prototipe, sehingga adalah, prototipe warisan tidak dapat digunakan untuk beberapa warisan. Ini adalah hal yang baik dan buruk. Karena:
Dalam bahasa yang berorientasi objek seperti Java dan C#, warisan berganda tidak didukung, dan warisan ganda diyakini tidak sesuai dengan berorientasi objek
Beberapa antarmuka tidak dapat diimplementasikan!
Oke, hanya itu yang saya tulis hari ini. Untuk meringkas, prototipe pewarisan memecahkan beberapa masalah konstruk warisan dan memperkenalkan beberapa masalah baru. Secara keseluruhan, prototipe warisan adalah metode warisan yang paling banyak digunakan, dan itu juga cara untuk benar -benar menerapkan warisan dalam tata bahasa JavaScript!