Pendahuluan Warisan
Warisan dalam JS adalah topik yang sangat kompleks, jauh lebih kompleks daripada warisan dalam bahasa yang berorientasi objek lainnya. Dalam sebagian besar bahasa yang berorientasi objek lainnya, mewarisi kelas hanya membutuhkan satu kata kunci. Untuk mencapai tujuan mewarisi anggota publik di JS, serangkaian tindakan perlu diambil. JS adalah warisan prototipe. Berkat fleksibilitas ini, kami dapat menggunakan warisan berbasis kelas standar atau warisan prototipe yang lebih halus. Harus jelas dalam JS bahwa semua warisan dilakukan melalui prototipe, dan JS diwarisi berdasarkan objek.
mewarisi:
function hewan (name) {this.name = name; this.showname = function () {alert (this.name); }} function cat (name) {animal.call (this, name); } var kucing = kucing baru ("Black Cat"); cat.showname ();Animal.call (ini) berarti menggunakan objek hewan alih -alih objek ini. Lalu jangan ada semua sifat dan metode hewan di Cat? Objek kucing dapat secara langsung memanggil metode dan sifat hewan.
Warisan berganda:
function class10 () {this.showsub = function (a, b) {alert (ab); }} function class11 () {this.showadd = function (a, b) {alert (a+b); }} function class2 () {class10.call (this); Class11.call (ini); }Ini sangat sederhana, menggunakan dua panggilan untuk mencapai banyak warisan
Tentu saja, ada metode lain untuk mewarisi JS, seperti menggunakan rantai prototipe, yang tidak termasuk dalam ruang lingkup artikel ini, tetapi hanya menjelaskan penggunaan panggilan di sini. Berbicara tentang panggilan, tentu saja ada juga berlaku. Kedua metode ini pada dasarnya berarti hal yang sama. Perbedaannya adalah bahwa parameter panggilan kedua dapat berupa jenis apa pun, sedangkan parameter kedua Apply harus merupakan array atau argumen.
Berikut adalah deskripsi cara menerapkan warisan sederhana dalam JavaScript?
Contoh berikut akan membuat karyawan kelas karyawan yang mewarisi semua properti dalam prototipe prototipe dari orang.
fungsi karyawan (nama, jenis kelamin, karyawan) {this.name = name; this.sex = sex; this.employeeId = karyawan;} // arahkan prototipe karyawan ke instance orang // karena instance orang dapat memanggil metode dalam prototipe orang, contoh karyawan juga dapat memanggil semua properti dalam prototipe orang. Karyawan.prototype = orang baru (); karyawan.prototype.geteMireeeId = function () {return this.employeeId;}; var zhang = karyawan baru ("zhangsan", "man", ""); console.log (zhang.getname ()); // "ZhangsanImplementasi warisan di atas kasar dan ada banyak masalah:
Orang terpakai saat membuat konstruktor dan prototipe karyawan (selanjutnya disebut sebagai kelas), yang tidak pantas.
Konstruktor karyawan tidak dapat menghubungi konstruktor orang tua kelas orang tua, menghasilkan penugasan berulang nama dan atribut seks dalam konstruktor karyawan.
Fungsi dalam karyawan akan mengganti fungsi dengan nama yang sama secara langsung, tanpa mekanisme kelebihan beban (dan yang sebelumnya adalah masalah tipe yang sama).
Sintaks untuk membuat kelas JavaScript terlalu tersebar dan tidak seanggun sintaks dalam C#/Java.
Ada kesalahan dalam menunjuk atribut konstruktor dalam implementasi.