ใน JavaScript เราสามารถใช้ต้นแบบเพื่อให้ได้มรดก
ตัวอย่างเช่น
function baz () {this.oo = "";} function foo () {} foo.prototype = new baz (); var myfoo = new foo (); myfoo.oo;ด้วยวิธีนี้เราสามารถเข้าถึงแอตทริบิวต์ OO ใน BAZ สิ่งนี้เป็นไปไม่ได้ในการใช้งานจริงเนื่องจากลักษณะการแบ่งปันของต้นแบบ (ข้อมูลจะถูกบันทึกไว้บนกอง)
อินสแตนซ์ทั้งหมดใช้ต้นแบบ แต่เมื่อแอตทริบิวต์ BAZ มีประเภทอ้างอิงมันจะเป็นเรื่องน่าเศร้า หากมีการแก้ไขอินสแตนซ์หนึ่งอินสแตนซ์อื่นจะเปลี่ยนไปเช่นกัน ... Wuwuwu
จะมีมรดกรวมกันตามธรรมชาติ
function baz () {this.oo = "";} baz.prototype.xx = function () {} function foo () {baz.call (นี่); // การโทรครั้งที่สอง} foo.prototype = new baz ();สิ่งนี้จะมีปัญหาและรหัสยังแสดงให้เห็นว่า BAZ จะถูกเรียกสองครั้ง ราศีกันย์อนุญาตได้อย่างไร?
หากคุณเพิ่มประโยควิธีที่สองไม่จำเป็นต้องมีปัญหากับวิธีแรกหรือไม่? คำตอบคือไม่
เหตุผลก็คือการค้นหาแอตทริบิวต์เริ่มต้นด้วยวัตถุเอง เมื่อไม่พบจะพบได้จะพบได้ในต้นแบบ เมื่อโทรแอตทริบิวต์จะได้รับการสืบทอด
ให้ฉันเพิ่มประโยคอื่นแล้วจะไม่เพียงพอที่จะใช้การสืบทอดการโทรแบบนี้? สิ่งนี้เป็นไปได้ถ้าคุณไม่ใช้ต้นแบบ แต่คุณจะไม่ใช้ต้นแบบเป็นราศีกันย์ได้อย่างไร
วิธีการนี้ใช้ร่วมกันบนต้นแบบดังนั้นประสิทธิภาพจะดีขึ้นมาก
การสืบทอดการรวมกันของกาฝาก
__xxtends = function (p, c) {function ctor () {this.constructor = c; // constructor} ctor.prototype = p.prototype; c.prototype = new ctor ();} ฟังก์ชัน baz () {this.oo = [1];} baz.prototype.xx = function () {} __ ขยาย (baz, foo); ฟังก์ชั่น foo () {baz.call (นี่);} var myfoo = new foo (); myfoo.oo; myfoo.xx;สิ่งนี้ไม่เพียง แต่แก้ปัญหาของการโทรสองครั้งเท่านั้น แต่ยังช่วยแก้ปัญหาที่เมื่อวัตถุเรียกตัวสร้างฟังก์ชั่นจริงที่สร้างวัตถุเรียกว่าแทนตัวสร้างอื่น ๆ ในห่วงโซ่ต้นแบบ
มีคำสั่งในรหัส
ตัวสร้างเป็นแอตทริบิวต์บนวัตถุต้นแบบและเป็นผู้สร้างวัตถุ เนื่องจากแอตทริบิวต์ต้นแบบของเราได้รับการกำหนดใหม่ตัวสร้างจึงได้รับการสืบทอด
ที่นี่ฉันต้องการพูดคุยเกี่ยวกับวิธีการสร้างวัตถุนั่นคือสิ่งที่ใหม่ได้ทำ
ตัวอย่างเช่น:
var a = new b ();
ที่จริงแล้วมันเป็นเช่นนี้ a = {}; สร้าง A สำหรับ A และจากนั้น b.call (a); การโทรเริ่มต้น มีขั้นตอนอื่นก่อนการโทรซึ่งเป็นวัตถุต้นแบบภายในของ
วัตถุต้นแบบที่คุณสมบัติต้นแบบตั้งค่าเป็นคะแนน B มีแอตทริบิวต์ตัวสร้างบนต้นแบบซึ่งใช้ในการสร้างการควบคุมหน่วยความจำการจัดสรรวัตถุ
มันอาจจะทั้งหมด ... มันยังสายไปเลย รักษาใจที่สงบและอย่าใจร้อน ทำงานหนักเพื่อเปลี่ยนแปลงในวันพรุ่งนี้และหวังว่าทุกอย่างจะค่อยๆดีขึ้น
ข้างต้นเป็นเนื้อหาทั้งหมดที่ตัวแก้ไขนำมาให้คุณเกี่ยวกับความเข้าใจที่ครอบคลุมเกี่ยวกับการสืบทอด (ต้องอ่าน) ใน JavaScript ฉันหวังว่าทุกคนจะสนับสนุนการเดินกลับบ้านมากขึ้น