คำตอบสั้น ๆ : __proto__
เป็นการอ้างอิงถึงprototype
คุณสมบัติของตัวสร้างที่สร้างวัตถุ
วัตถุใน JavaScript
วัตถุ JavaScript เป็นชนิดในตัวสำหรับคอลเลกชันคุณสมบัติที่เป็นศูนย์หรือมากกว่า คุณสมบัติคือภาชนะที่เก็บวัตถุอื่น ๆ ค่าดั้งเดิมหรือฟังก์ชั่น
ตัวสร้างใน JavaScript
ฟังก์ชั่นเป็นวัตถุปกติ (ซึ่งนำมาใช้[[Call]]
ในข้อกำหนด ECMA-262) ด้วยความสามารถเพิ่มเติมของการโทรออกได้ แต่มีบทบาทอื่นใน JavaScript: พวกเขากลายเป็นตัวสร้าง ( โรงงานสำหรับวัตถุ) หากเรียกใช้ผ่านnew
ดำเนินการ ตัวสร้างเป็นแบบอะนาล็อกคร่าวๆกับคลาสในภาษาอื่น
ทุกฟังก์ชั่นจาวาสคริปต์เป็นตัวอย่างของFunction
ฟังก์ชั่นวัตถุในตัวที่มีคุณสมบัติพิเศษชื่อที่prototype
ใช้ในการใช้การสืบทอดตามคุณสมบัติต้นแบบและคุณสมบัติที่ใช้ร่วมกัน ทุกวัตถุที่สร้างโดยฟังก์ชั่นคอนสตรัคเตอร์มีการอ้างอิงโดยนัย (เรียกว่าต้นแบบหรือ__proto__
) กับค่าของคอนสตรัคprototype
เตอร์
นวกรรมิกprototype
เป็นแบบพิมพ์เขียวสำหรับการสร้างวัตถุเนื่องจากทุกวัตถุที่สร้างโดยนวกรรมิกได้รับการอ้างอิงถึงprototype
สำหรับการสร้างวัตถุตั้งแต่ทุกวัตถุที่สร้างขึ้นโดยคอนสตรัคสืบทอดการอ้างอิงถึงมัน
โซ่ต้นแบบ
ระบุวัตถุต้นแบบที่ผ่านคุณสมบัติภายในหรือ[[Prototype]]
__proto__
ความสัมพันธ์ต้นแบบระหว่างวัตถุสองชิ้นนั้นเกี่ยวกับการสืบทอด: ทุกวัตถุสามารถมีวัตถุอื่นเป็นต้นแบบ ต้นแบบอาจเป็นnull
ค่า
ห่วงโซ่ของวัตถุที่เชื่อมต่อกันด้วย__proto__
คุณสมบัติที่เรียกว่าห่วงโซ่ต้นแบบ เมื่อทำการอ้างอิงไปยังคุณสมบัติในวัตถุการอ้างอิงนั้นจะเกิดขึ้นกับคุณสมบัติที่พบในวัตถุแรกในห่วงโซ่ต้นแบบที่มีคุณสมบัติของชื่อนั้น ต้นแบบลูกโซ่ทำงานเหมือนเป็นวัตถุชิ้นเดียว
ดูภาพนี้ (แยกจากบล็อกนี้):
เมื่อใดก็ตามที่คุณพยายามเข้าถึงทรัพย์สินในวัตถุ JavaScript เริ่มต้นการค้นหาสำหรับมันในวัตถุที่และยังคงมีต้นแบบของต้นแบบต้นแบบและอื่น ๆ จนทรัพย์สินที่จะพบหรือถ้าถือค่า__proto__
null
การสืบทอดประเภทนี้โดยใช้ลูกโซ่ต้นแบบมักถูกเรียกว่าการมอบหมายเพื่อหลีกเลี่ยงความสับสนกับภาษาอื่น ๆ โดยใช้คลาสลูกโซ่
วัตถุเกือบทั้งหมดเป็นอินสแตนซ์ของObject
เนื่องจากObject.prototype
อยู่ในห่วงโซ่ต้นแบบของพวกเขา แต่Object.prototype
ไม่ใช่ตัวอย่างObject
เนื่องจากObject.prototype.__proto__
เก็บค่าnull
ไว้
คุณยังสามารถสร้างวัตถุด้วยnull
ต้นแบบดังนี้:
var dict = Object.create(null);
วัตถุดังกล่าวเป็นแผนที่ที่ดีกว่า (พจนานุกรม) มากกว่าวัตถุที่แท้จริงซึ่งเป็นเหตุผลที่ทำแบบนี้บางครั้งเรียกว่าDictรูปแบบ ( Dictพจนานุกรม)
หมายเหตุ: วัตถุที่สร้างขึ้นโดยใช้ตัวอักษร{}
เป็นกรณีของObject
ตั้งแต่มีการอ้างอิงถึง({}).__proto__
Object.prototype