Pengenalan Warisan
Warisan dalam JS ialah topik yang sangat kompleks, jauh lebih kompleks daripada warisan dalam mana-mana bahasa berorientasikan objek lain. Dalam kebanyakan bahasa berorientasikan objek lain, mewarisi daripada kelas memerlukan hanya satu kata kunci. Bagi mencapai tujuan mewarisi ahli awam di JS, beberapa langkah perlu diambil. JS tergolong dalam warisan prototaip Terima kasih kepada fleksibiliti ini, kita boleh menggunakan sama ada warisan berasaskan kelas standard atau warisan prototaip yang lebih halus. Perlu jelas dalam JS bahawa semua warisan dilakukan melalui prototaip, dan JS mewarisi berdasarkan objek.
Diwarisi:
function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName();
Haiwan.panggilan(ini) bermaksud Jika anda gunakan objek Haiwan dan bukannya objek ini, maka Kucing mempunyai semua sifat dan kaedah Haiwan. Objek Kucing boleh terus memanggil kaedah dan sifat Haiwan. >
Ia sangat mudah, menggunakan dua panggilan untuk mencapai berbilang warisan
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }
Contoh berikut akan mencipta Pekerja kelas pekerja, yang mewarisi semua sifat dalam prototaip prototaip daripada Person.
Pelaksanaan warisan di atas sangat kasar dan terdapat banyak masalah:
function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } // 将Employee的原型指向Person的一个实例 // 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。 Employee.prototype = new Person(); Employee.prototype.getEmployeeID = function() { return this.employeeID; }; var zhang = new Employee("ZhangSan", "man", ""); console.log(zhang.getName()); // "ZhangSan
Pembina Pekerja tidak boleh memanggil pembina kelas induk Orang, menyebabkan penetapan nama dan atribut jantina berulang dalam pembina Pekerja.
Fungsi dalam Pekerja akan menimpa fungsi nama yang sama dalam Orang, dan tiada mekanisme lebihan beban (ini adalah jenis masalah yang sama seperti yang sebelumnya).
Sintaks untuk mencipta kelas JavaScript terlalu berpecah-belah dan tidak seanggun sintaks dalam C#/Java.
Terdapat ralat penunjuk dalam atribut pembina dalam pelaksanaan.
Di atas ialah kandungan warisan dalam JavaScript dan teknik inheritance_javascript yang lain Untuk kandungan yang lebih berkaitan, sila perhatikan laman web PHP Cina (www.php.cn)!