ก่อนอื่นให้ดูที่การสืบทอดที่ไม่ใช่กระแสหลัก: วิธีการสืบทอดอินสแตนซ์
ฉันไม่ได้พูดเรื่องไร้สาระมากนัก เนื่องจากมันได้รับการสืบทอดโดยที่ไม่เป็นกระแสหลักจึงต้องไม่ถูกใช้บ่อย เนื่องจากไม่ได้ใช้บ่อยและยังคงมีอยู่จึงมีเพียงปัจจัยเดียวที่ใช้ในโอกาสที่เฉพาะเจาะจง วิธีการสืบทอดอินสแตนซ์ส่วนใหญ่ใช้สำหรับการสืบทอดของวัตถุหลักและยังเป็นวิธีเดียวที่จะแก้ปัญหาการสืบทอดของวัตถุหลักจนถึงตอนนี้
มรดกของวัตถุหลักมีค่าที่แน่นอน ตัวอย่างเช่นวัตถุข้อผิดพลาด บริษัท ของเราอาจต้องใช้คลาสข้อผิดพลาดเพื่อลดความซับซ้อนของการพัฒนาในอนาคต ในเวลานี้ฉันต้องใช้วิธีการสืบทอดอินสแตนซ์เพื่อสืบทอดข้อผิดพลาด
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น ExtendingError (MES)
-
VAR อินสแตนซ์ = ข้อผิดพลาดใหม่ (MES);
instance.newerror = function () {
การแจ้งเตือน ("ข้อผิดพลาดของคุณคือ"+mes);
-
อินสแตนซ์กลับ;
-
ตกลงทดสอบ:
การคัดลอกรหัสมีดังนี้:
var e = new extendingError ("หมายเลขของคุณน้อยกว่าหนึ่ง");
E.Newerror ();
การแจ้งเตือน (e.toString ());
ผลลัพธ์ทำให้เราพึงพอใจ:
ตกลงโดยไม่พูดเรื่องไร้สาระมากนักนี่เป็นวิธีการสืบทอดที่ไม่ใช่กระแสหลักซึ่งโดยทั่วไปใช้สำหรับการสืบทอดของวัตถุหลักเพียงจำไว้!
ถัดไปลองดูที่การสืบทอดที่ไม่ใช่หลักครั้งที่สอง: คัดลอกวิธีการสืบทอด
ตามชื่อแนะนำการคัดลอกการสืบทอดหมายถึงการสืบทอดของวัตถุผ่านการคัดลอก ฉันควรคัดลอกอะไร เห็นได้ชัดว่ามันเป็นคุณสมบัติและวิธีการของวัตถุ คุณยังจำได้ไหมว่าใน JavaScript ชั้นเรียนนั้นเป็นแฮชแต้มได้จริงหรือ หากคุณจำไม่ได้ให้กลับไปตรวจสอบพื้นฐาน ฉันอาจเขียนบทความเกี่ยวกับวัตถุ JavaScript ในขณะที่
มันจะง่ายกว่าที่จะเข้าใจสิ่งนี้เพียงแค่ดูรหัส:
ก่อนอื่นเขียนวิธีขยาย:
การคัดลอกรหัสมีดังนี้:
function.prototype.extend = function () {
สำหรับ (var pro ใน obj)
-
// นี่เป็นสำเนาที่สมบูรณ์ของคุณสมบัติและวิธีการของคลาสแม่
this.prototype [pro] = obj [pro];
-
-
ตกลงเขียนโค้ดเพื่อดูวิธีการใช้งาน:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นสัตว์ ()
-
ฟังก์ชั่นคน ()
-
People.extend (สัตว์ใหม่ ())
-
บุคคลที่ฉลาดสามารถเห็นได้อย่างรวดเร็วว่าข้อเสียของวิธีนี้ชัดเจนเกินไป:
เมื่อคัดลอกวิธีการแอตทริบิวต์ของวัตถุทีละรายการจะใช้การสะท้อนจริง ฉันจะไม่พูดอะไรมากมายเกี่ยวกับความเสียหายต่อประสิทธิภาพของการสะท้อน
เช่นเดียวกับการสืบทอดต้นแบบวัตถุหลักจะต้องเริ่มต้น เมื่อมีการกำหนดความสัมพันธ์ในการสืบทอด แต่พารามิเตอร์ยังคงไม่แน่นอนมันไม่สามารถเล่นได้!
ในระยะสั้นวิธีนี้ไม่ได้ใช้โดยทั่วไป
โอเคมาพูดถึงสิ่งที่ใช้กันทั่วไป มิกซ์มิกซ์!
สิ่งนี้ขึ้นอยู่กับวิธีการสืบทอดหลักสองวิธี การเปรียบเทียบวิธีการสืบทอดสองวิธีเราสามารถพบได้ว่าข้อดีและข้อเสียของวิธีการสืบทอดทั้งสองนั้นสมบูรณ์ดังนั้นจึงง่ายที่จะผสมเข้าด้วยกัน!
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นคน (ชื่อ)
-
this.name = ชื่อ;
this.sayname = function () {
การแจ้งเตือน ("ชื่อของฉันคือ"+ชื่อ);
-
-
ฟังก์ชั่นสาว (ชื่ออายุ)
-
// มรดกการก่อสร้าง
สิ่งนี้พ่อ = ผู้คน;
สิ่งนี้พ่อ (ชื่อ);
ลบสิ่งนี้พ่อ;
this.introduce = function () {
การแจ้งเตือน ("ชื่อของฉันคือ"+ชื่อ+". ฉันคือ"+อายุ);
-
-
// การสืบทอดต้นแบบ
girl.prototype = คนใหม่ ();
โอเคส่วนผสมของทั้งสองวิธีตอนนี้มาดูกันว่าปัญหาได้รับการแก้ไขหรือไม่?
var g = สาวใหม่ ("xuan", 22);
การแจ้งเตือน (G ตัวอย่างของคน);
G.SayName ();
G.introduce ();
ทดสอบผ่าน!
นี่เป็นวิธีแก้ปัญหาที่ค่อนข้างสมบูรณ์แบบ แต่จะเพิ่มความซับซ้อนของรหัสดังนั้นโซลูชันเฉพาะขึ้นอยู่กับการเลือกของทุกคนในทางปฏิบัติ
นี่คือวิธีทั้งหมดในการเล่นกับ JavaScript ทุกคนยินดีที่จะติดตามบทความอื่น ๆ ของฉันต่อไป