บทนำมรดก
มรดกใน JS เป็นหัวข้อที่ซับซ้อนมากซับซ้อนกว่าการสืบทอดในภาษาที่มุ่งเน้นวัตถุอื่น ๆ ในภาษาที่มุ่งเน้นวัตถุอื่น ๆ ส่วนใหญ่การสืบทอดคลาสต้องใช้คำหลักเพียงคำเดียว เพื่อให้บรรลุวัตถุประสงค์ในการสืบทอดสมาชิกสาธารณะใน JS จำเป็นต้องดำเนินการตามมาตรการ JS เป็นมรดกต้นแบบ ด้วยความยืดหยุ่นนี้เราสามารถใช้มรดกตามคลาสมาตรฐานหรือมรดกต้นแบบที่ละเอียดอ่อนกว่า มันควรจะชัดเจนใน JS ว่าการสืบทอดทั้งหมดจะดำเนินการผ่านต้นแบบและ JS นั้นสืบทอดมาจากวัตถุ
สืบทอด:
ฟังก์ชันสัตว์ (ชื่อ) {this.name = name; this.showname = function () {Alert (this.name); }} ฟังก์ชั่น cat (ชื่อ) {iment.call (ชื่อนี้); } var cat = แมวใหม่ ("แมวดำ"); cat.showname ();Animal.call (นี่) หมายถึงการใช้วัตถุสัตว์แทนวัตถุนี้ ถ้าอย่างนั้นไม่มีคุณสมบัติและวิธีการของสัตว์ในแมวใช่ไหม วัตถุแมวสามารถเรียกวิธีการและคุณสมบัติของสัตว์ได้โดยตรง
การสืบทอดหลายครั้ง:
ฟังก์ชั่น class10 () {this.showsub = function (a, b) {alert (ab); }} ฟังก์ชั่น class11 () {this.showadd = ฟังก์ชั่น (a, b) {การแจ้งเตือน (a+b); }} function class2 () {class10.call (นี่); class11.call (นี่); -มันง่ายมากโดยใช้การโทรสองครั้งเพื่อให้ได้มรดกหลายครั้ง
แน่นอนว่ามีวิธีการอื่น ๆ ในการสืบทอด JS เช่นการใช้โซ่ต้นแบบซึ่งไม่ได้ตกอยู่ในขอบเขตของบทความนี้ แต่อธิบายการใช้การโทรที่นี่เท่านั้น การพูดถึงการโทรแน่นอนว่ายังมี ทั้งสองวิธีนี้หมายถึงสิ่งเดียวกัน ความแตกต่างคือพารามิเตอร์ที่สองของการโทรสามารถเป็นประเภทใดก็ได้ในขณะที่พารามิเตอร์ที่สองของการสมัครจะต้องเป็นอาร์เรย์หรืออาร์กิวเมนต์
นี่คือคำอธิบายของวิธีการใช้มรดกอย่างง่ายใน JavaScript?
ตัวอย่างต่อไปนี้จะสร้างพนักงานระดับพนักงานซึ่งสืบทอดคุณสมบัติทั้งหมดในต้นแบบต้นแบบจากบุคคล
ฟังก์ชั่นพนักงาน (ชื่อ, เพศ, EmployeeId) {this.name = name; this.sex = sex; this.eMployeeId = EmployeeId;} // ชี้ต้นแบบของพนักงานไปยังอินสแตนซ์ของบุคคล // เพราะบุคคลที่สามารถเรียกวิธีการในต้นแบบบุคคล Employee.prototype = คนใหม่ (); Employee.prototype.getEmployeeId = function () {return.employeeid;}; var zhang = พนักงานใหม่ ("Zhangsan", "Man", ""); console.log (zhang.getName ()); // "จางซานการดำเนินการตามมรดกข้างต้นนั้นหยาบและมีปัญหามากมาย:
บุคคลถูกสร้างอินสแตนซ์เมื่อสร้างตัวสร้างพนักงานและต้นแบบ (ต่อไปนี้จะเรียกว่าคลาส) ซึ่งไม่เหมาะสม
ตัวสร้างของพนักงานไม่สามารถเรียกตัวสร้างของบุคคลระดับผู้ปกครองส่งผลให้มีการมอบหมายชื่อและคุณลักษณะทางเพศซ้ำ ๆ ในตัวสร้างพนักงาน
ฟังก์ชั่นในพนักงานจะแทนที่ฟังก์ชั่นที่มีชื่อเดียวกันด้วยตนเองโดยไม่ต้องใช้กลไกมากเกินไป (และก่อนหน้านี้เป็นปัญหาประเภทเดียวกัน)
ไวยากรณ์สำหรับการสร้างคลาส JavaScript นั้นกระจัดกระจายเกินไปและไม่สง่างามเท่ากับไวยากรณ์ใน C#/Java
มีข้อผิดพลาดในการชี้ของแอตทริบิวต์ตัวสร้างในการใช้งาน