2. ยืมตัวสร้าง
เพื่อแก้ปัญหาที่เกิดจากการรวมค่าประเภทการอ้างอิงในต้นแบบเราใช้เทคนิคที่เรียกว่ายืมการขโมยคอนสตรัคเตอร์ (เรียกอีกอย่างว่าวัตถุปลอมแปลงหรือมรดกแบบคลาสสิก)
แนวคิดพื้นฐานของเทคนิคนี้: เรียกตัวสร้าง Supertype ภายในตัวสร้างคลาสย่อย
ตัวสร้างสามารถดำเนินการบนวัตถุ subclass ที่สร้างขึ้นใหม่โดยใช้วิธีการใช้ () และการโทร ()
ฟังก์ชั่น supertype () {this.colors = ["สีแดง", "สีน้ำเงิน", "เขียว"];} ฟังก์ชั่น subtype () {// ที่สืบทอดมา supertype supertype.apply (นี่);} var instance1 = subtype (new subtype (); // สีแดง, สีน้ำเงิน, เขียว, Blackvar Instance2 = ใหม่ชนิดย่อย (); Alert (อินสแตนซ์ 2.colors); // สีแดง, น้ำเงิน, เขียวในตัวอย่างข้างต้นตัวสร้าง Supertype เรียกจริงในสภาพแวดล้อมของอินสแตนซ์ย่อยที่สร้างขึ้นใหม่ (อินสแตนซ์ 1 อินสแตนซ์ 2) ด้วยวิธีนี้รหัสการเริ่มต้นวัตถุทั้งหมดที่กำหนดไว้ในฟังก์ชัน SuperType () จะถูกดำเนินการกับวัตถุชนิดย่อยใหม่ ดังนั้นแต่ละอินสแตนซ์ของชนิดย่อยจะมีสำเนาของแอตทริบิวต์สีของตัวเอง
ผ่านพารามิเตอร์
สำหรับห่วงโซ่ต้นแบบตัวสร้างการยืมมีข้อได้เปรียบที่ดีนั่นคือคุณสามารถผ่านพารามิเตอร์ในตัวสร้าง supertype ในตัวสร้างชนิดย่อย
ฟังก์ชั่น superType (ชื่อ) {this.name = name;} ฟังก์ชั่น subtype () {supertype.call (นี่, "bob"); this.age = 18;} var อินสแตนซ์ 1 = ใหม่ชนิดย่อย (); แจ้งเตือน (อินสแตนซ์ 1.age); //18Alert(instance1.Name); // บ๊อบปัญหาของการยืมตัวสร้าง:
วิธีการทั้งหมดถูกกำหนดไว้ในตัวสร้างดังนั้นจึงไม่มีวิธีพูดคุยเกี่ยวกับการใช้ฟังก์ชั่นซ้ำ ยิ่งไปกว่านั้นวิธีการที่กำหนดไว้ในต้นแบบ supertype ยังมองไม่เห็นชนิดย่อย
3. มรดกแบบรวมกัน
การสืบทอดการรวมกันบางครั้งเรียกว่าการสืบทอดแบบหลอกแบบคลาสสิกหมายถึงการรวมโซ่ต้นแบบและเทคนิคการยืมตัวสร้างเข้าด้วยกัน นี่คือโหมดของการสืบทอดที่เล่นจุดแข็งของทั้งคู่
ใช้โซ่ต้นแบบเพื่อใช้การสืบทอดคุณสมบัติและวิธีการต้นแบบ
การสืบทอดคุณสมบัติอินสแตนซ์ทำได้โดยการยืมตัวสร้าง
ด้วยวิธีนี้ฟังก์ชั่นนำกลับมาใช้ใหม่ได้โดยการกำหนดวิธีการบนต้นแบบและยังสามารถตรวจสอบให้แน่ใจว่าแต่ละอินสแตนซ์มีคุณลักษณะของตัวเอง
ฟังก์ชั่น supertype (ชื่อ) {this.name = name; this.colors = ["red", "blue", "green"];} supertype.prototype.sayname = function () {Alert (this.name);} ฟังก์ชั่นย่อย (ชื่อ, อายุ) {// แอตทริบิวต์การสืบทอด supertype.call (ชื่อนี้); this.age = age;} // วิธีการสืบทอด subtype.prototype = new supertype (); subtype.prototype.sayage = function () {Alert (this.age);} var instance1 = new type ("Bob", 22); instance1.colors.push ("black"); Alert (instance1.colors); //RED, BLUE, GREEN, BLACKENSTANCE1.SAYNAME (); //bobinstance1.sayage (); // 22VAR Instance2 = ชนิดย่อยใหม่ ("Alice", 21); Alert (Instance2.Colors); //RED, BLUE, GREENINSTANCE2.SAYNAME (); //aliceinstance2.sayage (); // 21ในตัวอย่างนี้ตัวสร้าง Supertype กำหนดคุณสมบัติสองประการ: ชื่อและสี ต้นแบบของ Supertype กำหนดวิธีการ SaysName ()
ตัวสร้างชนิดย่อยส่งผ่านในพารามิเตอร์ชื่อเมื่อเรียกตัวสร้าง Supertype และกำหนดอายุแอตทริบิวต์ของตัวเอง จากนั้นกำหนดอินสแตนซ์ของ supertype ให้กับต้นแบบของชนิดย่อย วิธีการบอกว่า () ถูกกำหนดไว้ในต้นแบบนี้
สิ่งนี้จะช่วยให้อินสแตนซ์ย่อยที่แตกต่างกันสองอินสแตนซ์มีคุณสมบัติของตัวเอง - รวมถึงแอตทริบิวต์สีและสามารถใช้วิธีเดียวกันได้
บทความข้างต้นพูดสั้น ๆ เกี่ยวกับ JS Amertance_borrow Constructors & Combination Almeritance เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น