วิธีแรกของต้นแบบ:
// เป็นประธานฟังก์ชั่นคลาส () {this.hair = 'ดำ'; this.eye = 'Black'; this.skin = 'สีเหลือง'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // ฟังก์ชั่น subclass man () {this.feature = ['Beard', 'strong']; } man.prototype = คนใหม่ (); var one = คนใหม่ (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // yellow console.log (one.view ()); // ดำ, ดำ, เหลืองวิธีนี้ง่ายที่สุด คุณจะต้องกำหนดค่าแอตทริบิวต์ต้นแบบของคลาสย่อยให้กับอินสแตนซ์ที่สืบทอดมาจากนั้นคุณสามารถใช้วิธีคลาสที่สืบทอดได้โดยตรง
แอตทริบิวต์ต้นแบบหมายถึงอะไร? ต้นแบบคือต้นแบบ แต่ละวัตถุ (กำหนดโดยฟังก์ชั่น) มีคุณสมบัติต้นแบบเริ่มต้นซึ่งเป็นประเภทวัตถุ
และแอตทริบิวต์เริ่มต้นนี้ใช้เพื่อใช้การตรวจสอบสไลด์ของห่วงโซ่ ซึ่งหมายความว่าหากแอตทริบิวต์ของวัตถุไม่มีอยู่แอตทริบิวต์จะพบได้ผ่านวัตถุที่แอตทริบิวต์ต้นแบบเป็นของ จะเกิดอะไรขึ้นถ้าไม่พบต้นแบบ?
JS จะค้นหาวัตถุที่คุณสมบัติต้นแบบเป็นของแอตทริบิวต์ต้นแบบโดยอัตโนมัติเพื่อที่จะได้จัดทำดัชนีต่อไปผ่านต้นแบบจนกว่าจะพบคุณสมบัติหรือต้นแบบและว่างเปล่าในที่สุด ("ไม่ได้กำหนด");
ตัวอย่างเช่นในวิธีหนึ่ง.view () ในตัวอย่างข้างต้น JS จะค้นหาก่อนว่ามีวิธีการดู () ในอินสแตนซ์เดียวหรือไม่ เนื่องจากไม่มีมันจึงมองหาคุณลักษณะของ man.prototype และค่าของต้นแบบเป็นตัวอย่างของบุคคล
อินสแตนซ์นี้มีวิธีการดู () ดังนั้นการโทรจึงสำเร็จ
วิธีที่สองคือการสมัคร:
// เป็นประธานฟังก์ชั่นคลาส () {this.hair = 'ดำ'; this.eye = 'Black'; this.skin = 'สีเหลือง'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // ฟังก์ชั่น subclass man () {// person.apply (นี่, array ใหม่ ()); Person.apply (นี่, []); this.feature = ['Beard', 'strong']; } var one = คนใหม่ (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // yellow console.log (one.view ()); // ดำ, ดำ, เหลืองหมายเหตุ: หากพารามิเตอร์การใช้งานว่างเปล่านั่นคือไม่มีการส่งพารามิเตอร์มันจะถูกส่งผ่านอาร์เรย์ใหม่ () และ [] และ null ไม่ถูกต้อง
ประเภทที่สามคือ Call+Prototype:
// เป็นประธานฟังก์ชั่นคลาส () {this.hair = 'ดำ'; this.eye = 'Black'; this.skin = 'สีเหลือง'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // ฟังก์ชั่น subclass man () {// person.apply (นี่, array ใหม่ ()); person.call (this, []); this.feature = ['Beard', 'strong']; } man.prototype = คนใหม่ (); var one = คนใหม่ (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // yellow console.log (one.view ()); // ดำ, ดำ, เหลืองกลไกการใช้งานของวิธีการโทรต้องการ man.prototype = บุคคลใหม่ (); ทำไม
นั่นเป็นเพราะวิธีการโทรใช้วิธีการแทนที่วิธีการและไม่คัดลอกแอตทริบิวต์วัตถุ
นี่คือวิธีที่ Google Map API สืบทอด
ข้างต้นสรุปการใช้วิธีการสืบทอดสามวิธี แต่แต่ละวิธีมีข้อดีและข้อเสีย
หากคลาสหลักเป็นแบบนี้:
// ฟังก์ชั่นระดับผู้ปกครอง (ผม, ตา, ผิวหนัง) {this.hair = ผม; this.eye = ตา; this.skin = ผิว; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; -คลาสย่อยควรได้รับการออกแบบอย่างไรเพื่อให้ Man Subclass ส่งผ่านพารามิเตอร์ไปยังบุคคลระดับผู้ปกครองในขณะที่สร้างวัตถุ วิธีการสืบทอดของต้นแบบไม่สามารถใช้งานได้
คุณต้องใช้วิธีการสมัครหรือโทร:
// ใช้วิธีการ // ฟังก์ชั่น subclass man (เส้นผม, ตา, ผิวหนัง) {person.apply (นี่, [ผม, ตา, ผิวหนัง]); this.feature = ['Beard', 'strong']; } // วิธีการโทร // ฟังก์ชั่น subclass man (เส้นผม, ตา, ผิวหนัง) {person.call (นี่, ผม, ตา, ผิวหนัง); this.feature = ['Beard', 'strong']; -แต่ยังมีข้อเสียในการใช้วิธีการใช้ ทำไม ใน JS เรามีตัวดำเนินการที่สำคัญมากซึ่งเป็น "อินสแตนซ์" ซึ่งใช้เพื่อเปรียบเทียบว่าทิศทางของฝ่ายตรงข้ามบางประเภทนั้นเป็นแบบหนึ่งหรือไม่
สำหรับตัวอย่างนี้นอกเหนือจากการเป็นคนประเภทหนึ่งแล้วอินสแตนซ์หนึ่งควรเป็นประเภทบุคคล อย่างไรก็ตามหลังจากสืบทอดวิธีการใช้งานหนึ่งไม่ได้อยู่ในประเภทของบุคคลนั่นคือค่าของ (หนึ่งอินสแตนซ์ของบุคคลของบุคคล) เป็นเท็จ
หลังจากทั้งหมดนี้วิธีที่ดีที่สุดในการสืบทอดคือวิธีการโทร+ต้นแบบ หลังจากนั้นคุณสามารถลองได้ว่าค่าของ (หนึ่งอินสแตนซ์ของ baseclass) เป็นจริงหรือไม่
วิธีการสืบทอดครั้งที่สามยังมีข้อบกพร่อง: เมื่อ subclassing วัตถุใหม่คุณต้องผ่านพารามิเตอร์ที่กำหนดโดยคลาสหลักและคุณสมบัติและวิธีการในคลาสพาเรนต์จะถูกทำซ้ำ วิธีการสืบทอดต่อไปนี้สมบูรณ์แบบ:
ฟังก์ชันบุคคล (ชื่อ) {this.name = name; } person.prototype.getName = function () {return this.name; } ฟังก์ชั่นภาษาจีน (ชื่อประเทศ) {person.call (ชื่อนี้); this.nation = ประเทศ; } // ฟังก์ชั่นวิธีการสืบทอดมรดกสืบทอด (subclass, superclass) {function f () {} f.prototype = superclass.prototype; subclass.prototype = new f (); subclass.prototype.constructor = subclass.constructor; } สืบทอด (ภาษาจีนบุคคล); chinese.prototype.getNation = function () {return this.nation; - var p = คนใหม่ ('Shijun'); var c = ใหม่จีน ("Liyatang", "จีน"); console.log (p); // บุคคล {ชื่อ: "Shijun", getName: function} console.log (c); // ภาษาจีน {ชื่อ: "liyatang", ชาติ: "จีน", คอนสตรัคเตอร์: ฟังก์ชั่น, getNation: ฟังก์ชั่น, getName: function} console.log (P.Constructor); // ฟังก์ชั่นบุคคล (ชื่อ) {} console.log (C.Constructor); // ฟังก์ชั่นภาษาจีน () {} console.log (c อินสแตนซ์ภาษาจีน); // True Console.log (C Person of Person); // จริงบทความข้างต้นกล่าวถึงวิธีการถ่ายทอดทางมรดกทั้งสามสั้น ๆ และข้อดีและข้อเสียของพวกเขาใน JS นี่คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น