ครั้งนี้เราจะพูดคุยเกี่ยวกับการรวมกันต้นแบบปรสิตและวิธีการสืบทอดการรวมกันของกาฝาก
1. การสืบทอดการรวมกัน : ยังเป็นที่รู้จักกันในชื่อการสืบทอดแบบหลอกแบบคลาสสิกมันหมายถึงวิธีการสืบทอดที่รวมโซ่ต้นแบบและเทคโนโลยีคอนสตรัคเตอร์ที่ยืมมาเป็นชิ้นเดียว
ลองมาดูตัวอย่าง:
ฟังก์ชั่น supertype (ชื่อ) {this.name = name; this.colors = ["สีแดง", "สีน้ำเงิน", "สีเขียว"]; } supertype.prototype.sayname = function () {Alert (this.name); } ฟังก์ชั่น subtype (ชื่อ, อายุ) {supertype.call (ชื่อนี้); this.age = อายุ; } // วิธีการสืบทอดชนิดย่อย prototype = new superType (); subtype.prototype.sayage = function () {Alert (this.age); } var instance1 = ชนิดย่อยใหม่ ("Nicholas", 29); instance1.colors.push ("ดำ"); การแจ้งเตือน (อินสแตนซ์ 1.Colors); // สีแดง, น้ำเงิน, เขียว, สีดำอินสแตนซ์ 1.SayName (); // Nicholas Instance1.sayage (); // 29 var instance2 = ชนิดย่อยใหม่ ("greg", 27); การแจ้งเตือน (อินสแตนซ์ 2.colors); // สีแดง, สีน้ำเงิน, สีเขียวอินสแตนซ์ 2.sayname (); // greg instance2.sayage (); // 27การสืบทอดการรวมกันช่วยหลีกเลี่ยงข้อบกพร่องของห่วงโซ่ต้นแบบและการยืมตัวสร้างและรวมข้อดีของพวกเขาเข้าด้วยกัน
2. การสืบทอดต้นแบบ
การสืบทอดสามารถดำเนินการได้โดยไม่ต้องสร้างตัวสร้างที่กำหนดไว้ล่วงหน้า สำเนาที่คัดลอกสามารถแก้ไขเพิ่มเติมได้
ฟังก์ชันวัตถุ (o) {function f () {}; f.prototype = o; คืน F ใหม่; } var person = {ชื่อ: "Nicholas", เพื่อน: ["Shelby", "Court", "Van"]}; var otherperson = วัตถุ (บุคคล); อีกคนหนึ่ง. name = "greg"; Anotherperson.friends.push ("Rob"); var otherperson = วัตถุ (บุคคล); อีกคนหนึ่ง. name = "Linda"; Anotherperson.friends.push ("บาร์บี้"); การแจ้งเตือน (person.friends); // Shelby, Court, Van, Rob, Barbie3. มรดกปรสิต
คล้ายกับการสืบทอดต้นแบบมากมันยังเป็นการสร้างวัตถุตามวัตถุหรือข้อมูลบางอย่างจากนั้นปรับปรุงวัตถุและในที่สุดก็ส่งคืนวัตถุ เพื่อแก้ปัญหาความไร้ประสิทธิภาพที่เกิดจากรูปแบบการสืบทอดการรวมกันเนื่องจากการโทรหลายครั้งไปยังตัวสร้าง Supertype รูปแบบนี้สามารถใช้กับการสืบทอดการรวมกัน
ฟังก์ชันวัตถุ (o) {function f () {}; f.prototype = o; คืน F ใหม่; } ฟังก์ชั่น createAnother (ต้นฉบับ) {var clone = วัตถุ (ต้นฉบับ); clone.sayhi = function () {แจ้งเตือน ("hi"); - กลับโคลน; } var person = {ชื่อ: "Nicholas", เพื่อน: ["Shelby", "Court", "Van"]}; var otherperson = createAnother (บุคคล); อีกคนหนึ่ง Sayhi ();4. การสืบทอดการรวมกันของปรสิต
การรวมข้อดีของการสืบทอดปรสิตและการสืบทอดการรวมกันเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการบรรลุการสืบทอดประเภทพื้นฐาน
// ฟังก์ชั่นต้นแบบที่สืบทอดมาขยาย (ชนิดย่อย, supertype) {ฟังก์ชั่น f () {}; f.prototype = supertype.prototype; VAR Prototype = New F; Prototype.Constructor = ชนิดย่อย; subtype.prototype = prototype; } // ฟังก์ชั่นเมธอด superclass superType (ชื่อ) {this.name = name; this.colors = ["สีแดง", "สีน้ำเงิน", "สีเขียว"]; } supertype.prototype.sayname = function () {return this.name; } // ฟังก์ชั่นเมธอดย่อย superType (ชื่อ) {this.name = name; this.colors = ["สีแดง", "สีน้ำเงิน", "สีเขียว"]; } supertype.prototype.sayname = function () {return this.name; } // ฟังก์ชั่นวิธีการย่อยประเภทย่อย (ชื่อ, อายุ) {supertype.call (ชื่อนี้, ชื่อ); this.age = อายุ; } // Prototype ขยาย (ชนิดย่อย, supertype); // เมธอด subclass method type.prototype.sayage = function () {return this.age; } var instance1 = ชนิดย่อยใหม่ ("Shelby"); var instance2 = ชนิดย่อยใหม่ ("ศาล", 28); instance1.colors.push ('ดำ'); การแจ้งเตือน (อินสแตนซ์ 1.Colors); // สีแดง, น้ำเงิน, สีเขียว, การแจ้งเตือนสีดำ (อินสแตนซ์ 2.Colors); // สีแดง, น้ำเงิน, การแจ้งเตือนสีเขียว (อินสแตนซ์ 1 อินสแตนซ์ของชนิดย่อย); // การแจ้งเตือนจริง (อินสแตนซ์ 1 อินสแตนซ์ของ supertype); //จริงประสิทธิภาพของตัวอย่างนี้สะท้อนให้เห็นว่ามันเรียกว่าตัวสร้าง Supertype เพียงครั้งเดียวเท่านั้นและหลีกเลี่ยงการสร้างคุณสมบัติที่ไม่จำเป็นที่ไม่จำเป็นบน subtype.prototype ในเวลาเดียวกันห่วงโซ่ต้นแบบจะยังคงไม่เปลี่ยนแปลง ดังนั้นอินสแตนซ์ของและ isprototypeof () จึงสามารถใช้งานได้ตามปกติ โดยทั่วไปนักพัฒนาเชื่อว่าการสืบทอดการผสมผสานของ parasitic combinatorial เป็นกระบวนทัศน์การสืบทอดที่เหมาะที่สุดสำหรับประเภทอ้างอิง
บทความข้างต้นมรดกเชิงวัตถุ js-คำอธิบายโดยละเอียดเกี่ยวกับการสืบทอดหลายชุดคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น