JavaScript ใช้ลักษณะของหลายภาษา ตัวอย่างเช่นไวยากรณ์ Java ฟังก์ชั่นการวาดบนรูปแบบการสืบทอดต้นแบบที่ดึงมาจากตัวเองและการแสดงออกปกติดึงมาจาก Perl (DC JavaScript: Essence ภาษา)
อันดับแรก JS แต่ละตัวเป็นภาษาที่มุ่งเน้นวัตถุตามการสืบทอดต้นแบบ อาร์เรย์ด้านในเป็นวัตถุฟังก์ชั่นเป็นวัตถุและแน่นอนว่า "วัตถุ" ยังคงเป็นวัตถุ ยิ่งไปกว่านั้นแต่ละวัตถุมีสล็อตภายใน [[ต้นแบบ]] ซึ่งเป็นกุญแจสำคัญในการเชื่อมต่อห่วงโซ่ต้นแบบ เป็นที่ยอมรับว่าเราสามารถตั้งค่าคุณสมบัติต้นแบบสำหรับวัตถุ แต่แล้วอะไร นี่เป็นเพียงการรวมตัวกัน มีเจตนาฆาตกรรมที่ซ่อนอยู่เบื้องหลัง
ตกลงจากนั้นฉันสามารถใช้ isprototypeof () เพื่อตรวจสอบว่าวัตถุเป็นต้นแบบของวัตถุอื่นหรือไม่ อย่างไรก็ตามสิ่งนี้ยังขึ้นอยู่กับห่วงโซ่ [[prototype]]
ตัวอย่างเช่น:
// สร้างฟังก์ชันฟังก์ชัน foo () {} // แก้ไขคุณสมบัติต้นแบบของฟังก์ชัน foo.prototype = {ชื่อ: "foo.prototype"}; // สร้างอินสแตนซ์ var a = new foo (); // เขียนต้นแบบเริ่มต้นของ A ใหม่ซึ่งควรเป็น foo.prototype A.prototype = {ชื่อ: "A.prototype"};คำถามต่อไปนี้คือ foo.prototype เป็นต้นแบบของ A หรือไม่? -
สิ่งนี้จะต้องมีการดูแยกต่างหาก: ในมือข้างหนึ่ง a.prototype เป็น {ชื่อ: "a.prototype"}; อย่างไรก็ตาม foo.prototype.isprototypeof (a) ผลลัพธ์เป็นจริง
ลองมาดูความสัมพันธ์ที่เฉพาะเจาะจง: (ใช้ ---> หมายถึงห่วงโซ่ [[ต้นแบบ] ที่ไม่มีนัยสำคัญ] ---- หมายถึงความสัมพันธ์ของทรัพย์สินต้นแบบ)
ฟังก์ชั่น ---> function.prototype ---> object.prototype
function.prototype <--- foo ---- foo.prototype ------> object.prototype
นอกจากนี้ [[protptype]] ของจำนวนบูลีนสตริง ฯลฯ ยังคงเป็นฟังก์ชันวัตถุ prototype ฟังก์ชันวัตถุ prototype คือ "ฟังก์ชั่น" และไม่มี [[construct]] ภายในดังนั้นจึงไม่สามารถใช้เป็นตัวสร้าง; ในความเป็นจริง function.prototype คล้ายกัน: function () {} นอกเหนือจาก [[ต้นแบบ]] สล็อตภายในประเภท "ฟังก์ชั่น" ยังมีแอตทริบิวต์ต้นแบบ แต่ละฟังก์ชั่นมีวัตถุต้นแบบเสมอ: this.prototype = {constructor: this} (วัตถุปกติ) [[ต้นแบบ]] ของวัตถุปกตินี้เชื่อมต่อกับ Object.prototype
[[ต้นแบบ]] ของวัตถุอินสแตนซ์ที่สร้างขึ้นโดยคอนสตรัคเตอร์เป็น object.prototype หรือไม่?
[[ต้นแบบ]] ของอินสแตนซ์นี้เริ่มต้นโดยคุณสมบัติต้นแบบของตัวสร้าง โปรดทราบว่าไม่ใช่ [[ต้นแบบ]] ของฟังก์ชัน ดังนั้นถ้ามันเป็นวัตถุที่สร้างขึ้นโดยฟังก์ชันวัตถุก็เป็นจริง
Object เป็นฟังก์ชั่นต้นแบบของมันคือวัตถุที่มีชื่อเสียง prototype (ไร้สาระเล็กน้อย) แต่ [[ต้นแบบ] ของมันจะเป็นจุดไปที่ function.prototype โปรดดูด้านล่าง:
Object -----> function.prototype ------> Object.prototype
จะเปลี่ยนโซ่ [[ต้นแบบ]] นี้ได้อย่างไร?
มันสามารถอยู่ในรูปแบบของ var a = object.create (obj) หรือ object.setPrototypeof (OBJA, OBJB) ฉันไม่คิดว่ามีความจำเป็นที่จะต้องยกตัวอย่างเพราะความสัมพันธ์นั้นง่ายมาก ลองยกตัวอย่างเส็งเคร็งเท่านั้น ไม่มีความรู้สึก
คำถามสุดท้ายคือการมอบหมายพฤติกรรมขึ้นอยู่กับห่วงโซ่ [[ต้นแบบ]] หรือไม่?
ใช่แล้วในกรณีนี้