ขั้นแรกให้กำหนดวัตถุ OBJ และต้นแบบของวัตถุคือ obj._proto_ เราสามารถใช้วิธี getPrototypeof ใน ES5 เพื่อสอบถามต้นแบบของ OBJ เราพิสูจน์ว่าต้นแบบของ OBJ เท่ากับ Object.prototype เพื่อพิสูจน์ว่าต้นแบบของ OBJ นั้นมีอยู่หรือไม่ คำตอบกลับมาเป็นจริงดังนั้นจึงมีอยู่ จากนั้นเรากำหนดฟังก์ชัน foo () และฟังก์ชั่นใด ๆ มีวัตถุต้นแบบนั่นคือต้นแบบฟังก์ชัน เราสามารถเพิ่มแอตทริบิวต์ใด ๆ ลงในต้นแบบของฟังก์ชั่นจากนั้นแบ่งปันแอตทริบิวต์ของมันโดยวัตถุอินสแตนซ์ใหม่ (สองตัวอย่างต่อไปนี้จะถูกนำเสนอในรายละเอียด)
function foo () {} foo.prototype.z = 3; var obj = new foo (); obj.x = 1; obj.y = 2; obj.x //1obj.y //2obj.z // 3Typeof obj.ToString; //functionobj.valueof (); // foo {x: 1, y: 2, z: 3} obj.hasownproperty ('z'); //เท็จที่นี่ต้นแบบของ OBJ (_Proto_) ชี้ไปที่คุณสมบัติต้นแบบของฟังก์ชั่น FOO, ต้นแบบของ foo.prototype ชี้ไปที่ Object.prototype และจุดสิ้นสุดของห่วงโซ่ต้นแบบเป็นโมฆะ ผ่าน HasownProperty เราสามารถตรวจสอบได้ว่าคุณสมบัติ Z อยู่ใน OBJ หรือไม่ มันแสดงเท็จ ไม่มีคุณสมบัติ Z ใน OBJ แต่โดยการมองหาห่วงโซ่ต้นแบบเราพบว่ามันอยู่ใน foo.prototype ดังนั้น obj.z = 3 และสำหรับกรณีแรก obj.valueof () และ toString ทั้งคู่อยู่บนวัตถุ แน่นอนยกเว้นกรณีพิเศษต่อไปนี้
var obj2 = object.create (null); obj2.valueof (); // ไม่ได้กำหนด
Object.create () สร้างวัตถุที่ว่างเปล่าและต้นแบบของวัตถุนี้ชี้ไปที่พารามิเตอร์ ตัวอย่างที่ครอบคลุมต่อไปนี้จะแสดงวิธีการใช้คลาสเพื่อสืบทอดคลาสอื่น
// ประกาศบุคคลที่สร้างขึ้น (ชื่อ, อายุ) {this.name = name; this.age = age;} person.prototype.hi = function () {console.log ('hi, ชื่อของฉันคือ' +this.name +', อายุของฉันคือ' +this.age);}; person.prototype.legs_num = 2; console.log (this.name+'กำลังเดิน!');}; ฟังก์ชั่นนักเรียน (ชื่อ, อายุ, classnum) {person.call (นี่, ชื่อ, อายุ); this.classNum = classnum;} // สร้างนักเรียนวัตถุว่างเปล่า prototype = object.create (person.prototype); // constructor ระบุฟังก์ชั่นเพื่อสร้างวัตถุ student.prototype.constructor = student; student.prototype.hi = function () {console.log ('สวัสดีชื่อของฉันคือ'+this.name+'อายุของฉันคือ'+this.age+'และชั้นเรียนของฉันคือ' '+sub);}; // อินสแตนซ์วัตถุ bosnvar bosn = นักเรียนใหม่ (' bosn ', 27,' class 3 '); bosn.hi (); // สวัสดีฉันชื่อ Bosn อายุของฉันคือ 27 และชั้นเรียนของฉันคือคลาส 3bosn.legs_num; //2bosn.walk (); // bosn กำลังเดิน! bosn.learns ('คณิตศาสตร์'); // Bosn กำลังเรียนรู้คณิตศาสตร์บุคคลที่สร้างและนักเรียนของนักเรียนนี้ไปยังวัตถุอินสแตนซ์ (BOSN) และต้นแบบของวัตถุนี้ชี้ไปที่ต้นแบบของตัวสร้าง
เราใช้เมธอด object.create () เพื่อสร้างวัตถุที่ว่างเปล่าและต้นแบบของวัตถุนี้คือ person.prototype ข้อได้เปรียบของการเขียนสิ่งนี้คือเราสามารถสร้างแอตทริบิวต์ใด ๆ ของ studnet.prototype ด้วยตัวเองโดยไม่ส่งผลกระทบต่อบุคคลนั้นแอตทริบิวต์ prototype และสามารถสืบทอดแอตทริบิวต์ดั้งเดิมสำหรับบุคคล prototype เพราะนักเรียน subclass สืบทอดบุคคลชั้นเรียน หากคุณเขียนบุคคล prototype = student.prototype โดยตรงจากนั้นทั้งคู่ชี้ไปที่วัตถุในเวลาเดียวกัน ในขณะที่เพิ่มแอตทริบิวต์ให้กับ Student.prototype คุณลักษณะเดียวกันจะถูกเพิ่มเข้าไปในห่วงโซ่ต้นแบบของบุคคล
สำหรับวิธีการโทรในนักเรียนคอนสตรัคเตอร์สิ่งนี้จะชี้ไปที่วัตถุอินสแตนซ์ของนักเรียนที่สร้างขึ้นใหม่และสืบทอดผ่านการโทร
student.prototype.constructor = นักเรียนความหมายของประโยคนี้คือการระบุว่านักเรียนเป็นฟังก์ชั่นที่สร้างวัตถุนักเรียน หากคุณไม่ได้เขียนประโยคนี้ฟังก์ชั่นของวัตถุยังคงเป็นบุคคล
มีสามวิธีในการใช้มรดก
ฟังก์ชั่นบุคคล (ชื่ออายุ) {this.name = name; this.age = age;} function student () {} student.prototype = person.prototype; //1student.prototype = object.create (person.prototype); //2student.prototype = คนใหม่ (); // 3ห่วงโซ่ต้นแบบ JS ข้างต้นและการวิเคราะห์มรดก (ประสบการณ์ครั้งแรก) เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น