Artikel ini menganalisis penggunaan pewarisan rantai prototipe JavaScript. Bagikan untuk referensi Anda. Analisis spesifiknya adalah sebagai berikut:
Salin kode sebagai berikut: bentuk fungsi () {
this.name = 'bentuk';
this.toString = function () {
kembalikan nama ini;
}
}
fungsi twodshape () {
this.name = '2d Shape';
}
fungsi segitiga (samping, tinggi) {
this.name = 'Triangle';
this.side = sisi;
this.height = tinggi;
this.getarea = function () {
kembalikan ini.side*this.height/2;
};
}
/* warisan */
Twodshape.prototype = bentuk baru ();
Triangle.prototype = twodshape baru ();
Ketika kami sepenuhnya menulis ulang properti prototipe objek, kadang -kadang memiliki dampak negatif tertentu pada properti konstruktor objek.
Oleh karena itu, setelah kami menyelesaikan pengaturan hubungan warisan yang relevan, itu adalah kebiasaan yang sangat baik untuk mengatur ulang atribut konstanta dari objek -objek ini. Seperti yang ditunjukkan di bawah ini:
Salinan kode adalah sebagai berikut: twodshape.prototype.constructor = twodshape;
Triangle.prototype.constructor = Triangle;
menulis kembali:
Salin kode sebagai berikut: bentuk fungsi () {}
Bentuk.prototype.name = 'bentuk';
Shape.prototype.toString = function () {
kembalikan nama ini;
}
fungsi twodshape () {}
Twodshape.prototype = bentuk baru ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d bentuk';
fungsi segitiga (samping, tinggi) {
this.side = sisi;
this.height = tinggi;
}
Triangle.prototype = twodshape baru;
Triangle.prototype.constructor = Triangle;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getarea = function () {
kembalikan ini.side*this.height/2;
}
Tulis ulang lagi (Reference Pass alih -alih Nilai Pass):
Salin kode sebagai berikut: bentuk fungsi () {}
Bentuk.prototype.name = 'bentuk';
Shape.prototype.toString = function () {
kembalikan nama ini;
}
fungsi twodshape () {}
Twodshape.prototype = shape.prototype;
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d bentuk';
fungsi segitiga (samping, tinggi) {
this.side = sisi;
this.height = tinggi;
}
Triangle.prototype = twodshape.prototype;
Triangle.prototype.constructor = Triangle;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getarea = function () {
kembalikan ini.side*this.height/2;
}
Meskipun efisiensi ditingkatkan, metode seperti itu memiliki efek samping, karena itu adalah referensi yang lewat, bukan nilai lewat, sehingga nilai nama dalam "objek induk" terpengaruh.
Objek anak dan objek induk menunjuk ke objek yang sama. Oleh karena itu, begitu objek anak mengubah prototipe, objek induk juga akan segera diubah.
Tulis ulang lagi (menggunakan konstruktor sementara):
Salin kode sebagai berikut: bentuk fungsi () {}
Bentuk.prototype.name = 'bentuk';
Shape.prototype.toString = function () {
kembalikan nama ini;
}
fungsi twodshape () {}
var f = function () {}
F.prototype = shape.prototype;
Twodshape.prototype = new f ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d bentuk';
fungsi segitiga (samping, tinggi) {
this.side = sisi;
this.height = tinggi;
}
F.prototype = twodshape.prototype;
Triangle.prototype = baru f ();
Triangle.prototype.constructor = Triangle;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getarea = function () {
kembalikan ini.side*this.height/2;
}
Meskipun efisiensi ditingkatkan, metode seperti itu memiliki efek samping, karena itu adalah referensi yang lewat, bukan nilai lewat, sehingga nilai nama dalam "objek induk" terpengaruh.
Objek anak dan objek induk menunjuk ke objek yang sama. Oleh karena itu, begitu objek anak menyelaraskan prototipe dan memodifikasinya, objek induk juga akan segera diubah.
Saya harap artikel ini akan membantu pemrograman JavaScript semua orang.