การสืบทอดในจาวาสคริปต์ทำได้ผ่านห่วงโซ่ต้นแบบ: แต่ละวัตถุมีวัตถุอื่นเป็นต้นแบบและวัตถุสืบทอดคุณสมบัติจากต้นแบบนี้ สำหรับแต่ละวัตถุมีสามวิธีในการเข้าถึงวัตถุต้นแบบ:
1 .__ Proto__ วัตถุต้นแบบของวัตถุสามารถเข้าถึงได้ผ่านแอตทริบิวต์ __proto__ สถานที่ให้บริการนี้ได้รับการสนับสนุนเฉพาะใน Firefox, Safari และ Chrome เท่านั้นและไม่ได้อยู่ใน IE และ Opera
2.Object.getPrototypeof () คุณสามารถส่งผ่านวัตถุเป็นพารามิเตอร์ลงในเมธอด getPrototypeof () และหลังจากการดำเนินการมันจะส่งคืนวัตถุต้นแบบของวัตถุ วิธีนี้รองรับเฉพาะในมาตรฐาน ECMASCRIPT 5
3.O.Constructor.prototype ก่อนอื่นรับฟังก์ชั่นตัวสร้างของวัตถุจากนั้นเข้าถึงวัตถุต้นแบบโดยการเข้าถึงคุณสมบัติต้นแบบของฟังก์ชันตัวสร้าง สิ่งที่จำเป็นสำหรับการใช้วิธีนี้คือมีแอตทริบิวต์ตัวสร้างที่ชี้ไปที่ตัวสร้างในวัตถุ
ในการตรวจสอบว่ามีความสัมพันธ์แบบลูกโซ่ต้นแบบระหว่างสองวัตถุคุณสามารถใช้วิธี isprototype ():
การคัดลอกรหัสมีดังนี้:
var p = {x: 1};
var o = object.create (p);
console.log (p.isprototypeof (o)); // true
สำหรับวัตถุทั้งหมดที่สร้างขึ้นด้วยตัวอักษรวัตถุต้นแบบของพวกเขาคือ Object.prototype (เป็นวัตถุพิเศษ, Object.prototype ไม่มีวัตถุต้นแบบ):
การคัดลอกรหัสมีดังนี้:
var x = {a: 18, b: 28};
console.log (x .__ proto __); // object {}
สำหรับวัตถุทั้งหมดที่สร้างขึ้นด้วยตัวดำเนินการใหม่วัตถุต้นแบบของพวกเขาคือคุณสมบัติต้นแบบของฟังก์ชันตัวสร้าง:
การคัดลอกรหัสมีดังนี้:
var x = {a: 18, b: 28};
การทดสอบฟังก์ชั่น (c) {
this.c = c;
-
test.prototype = x;
var t = การทดสอบใหม่ (38);
console.log (t); // object {c = 38, a = 18, b = 28}
console.log (t .__ proto __); // object {a = 18, b = 28}
console.log (t .__ proto __.__ proto __); // object {}
กระบวนการใช้ตัวดำเนินการใหม่เพื่อสร้างวัตถุใน JavaScript มีดังนี้:
1. สร้างวัตถุเปล่าใหม่
2. ชี้แอตทริบิวต์ __proto__ ของวัตถุนี้ไปยังแอตทริบิวต์ต้นแบบของฟังก์ชันตัวสร้าง
3. ใช้วัตถุนี้เป็นพารามิเตอร์นี้และดำเนินการฟังก์ชันตัวสร้าง
จากกระบวนการสร้างข้างต้นเราสามารถสรุปได้ว่าวัตถุทั้งหมดที่สร้างขึ้นจากฟังก์ชั่นตัวสร้างเดียวกันมีแอตทริบิวต์ __proto__ (นั่นคือวัตถุต้นแบบของมัน) เท่ากันนั่นคือมีวัตถุต้นแบบเพียงชิ้นเดียวเท่านั้น:
การคัดลอกรหัสมีดังนี้:
var t = การทดสอบใหม่ (38);
var t2 = การทดสอบใหม่ (68);
console.log (t === t2); // false
console.log (t .__ proto__ === t2 .__ proto __); // true