Meskipun JavaScript tidak memberikan kata kunci yang diwariskan, kami masih dapat menemukan beberapa cara yang baik untuk mengimplementasikannya.
1. Warisan rantai prototipe:
Salinan kode adalah sebagai berikut:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
mengembalikan "pangkalan";
};
};
Base.constant = "konstan";
var sub = fungsi ()
{
};
Sub.prototype = basis baru ();
Sub.prototype.name = "sub";
Keuntungan: Menilai dari kata kunci kata kunci, contoh adalah contoh dari kelas induk dan instance dari kelas anak, yang tampaknya merupakan warisan paling murni.
Kerugian: Subkelas berbeda dari sifat dan metode kelas induk. Mereka harus dieksekusi secara terpisah setelah pernyataan seperti sub.prototype = basis baru (); dan tidak dapat dibungkus ke dalam sub konstruktor. Misalnya: sub.prototype.name = "sub"; warisan berganda tidak dapat dicapai.
2. Konstruk warisan:
Salinan kode adalah sebagai berikut:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
mengembalikan "pangkalan";
};
};
Base.constant = "konstan";
var sub = fungsi ()
{
Base.call (ini);
this.name = "sub";
};
Keuntungan: Multiple warisan dapat diimplementasikan, dan atribut yang unik untuk subkelas dapat ditetapkan di dalam konstruktor.
Kerugian: Menggunakan instanceof menemukan bahwa objek bukanlah instance dari kelas induk.
3. Instance Warisan:
Salinan kode adalah sebagai berikut:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
mengembalikan "pangkalan";
};
};
Base.constant = "konstan";
var sub = fungsi ()
{
var instance = base baru ();
instance.name = "sub";
instance return;
};
Keuntungan: Ini adalah objek dari kelas induk, dan efek yang sama dapat diperoleh dengan menggunakan objek baru untuk membuat objek dan tanpa menggunakan objek yang baru untuk membuat objek.
Kerugian: Objek yang dihasilkan pada dasarnya adalah instance dari kelas induk, bukan objek subkelas; warisan berganda tidak didukung.
4. Salin warisan:
Salinan kode adalah sebagai berikut:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
mengembalikan "pangkalan";
};
};
Base.constant = "konstan";
var sub = fungsi ()
{
var base = base baru ();
untuk (var i di pangkalan)
Sub.prototype [i] = base [i];
Sub.prototype ["name"] = "sub";
};
Keuntungan: Mendukung banyak warisan.
Kerugian: efisiensi rendah; Tidak dapat memperoleh metode yang tidak dapat disebutkan oleh kelas induk.
Bentuk -bentuk ini memiliki karakteristik mereka sendiri, dan hanya dalam hal kode yang saya berikan, mereka memenuhi tabel berikut:
2012-1-10: Ditambahkan, jika kita tidak memerlukan warisan kelas, kita hanya perlu warisan objek. Untuk browser yang mendukung ecmascript 5, kami juga dapat menggunakan metode objek. Membuat untuk mengimplementasikannya:
Salinan kode adalah sebagai berikut:
var base = function ()
{
this.level = 1;
this.name = "base";
this.toString = function () {
mengembalikan "pangkalan";
};
};
Base.constant = "konstan";
var sub = object.create (basis baru ());
sub.name = "sub";