ก่อนอื่นมาดูคำอธิบายอย่างเป็นทางการเกี่ยวกับการโทร (),“ การเรียกใช้วิธีหนึ่งของวัตถุและแทนที่วัตถุปัจจุบันด้วยวัตถุอื่น” หลังจากอ่านคำอธิบายนี้คุณอาจสับสนมากขึ้น ดูตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
var x = "ฉันเป็นตัวแปรส่วนกลาง"; // กำหนดตัวแปรส่วนกลาง x
ฟังก์ชัน A () {// กำหนดโครงสร้างคลาสฟังก์ชัน
this.x = "ฉันประกาศในโครงสร้างคลาสฟังก์ชัน A";
-
// กำหนดฟังก์ชั่นปกติและปรากฏขึ้นค่าของตัวแปร x ที่มีอยู่ในตัวชี้ปัจจุบัน
ฟังก์ชั่น f () {
การแจ้งเตือน (this.x);
-
// ค่าส่งคืนคือ "ฉันประกาศในโครงสร้างคลาสฟังก์ชั่น"
F.CALL (ใหม่ A ());
ความเข้าใจของฉันคือ F.Call (ใหม่ A ()) คือการคัดลอกฟังก์ชัน (จริง ๆ เป็นวัตถุ) f ไปยังวัตถุที่เรียกว่า "ใหม่ A ()" สำหรับการแยกวิเคราะห์ ในความเป็นจริงมันเหมือนกับผลการแยกวิเคราะห์ของรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชัน A () {
this.x = "ฉันประกาศในโครงสร้างคลาสฟังก์ชัน A";
การแจ้งเตือน (this.x);
-
a ();
เป็นเพียงขอบเขตของตัวแปร X นั้นแตกต่างกันในเวลานี้ ใช่ ... ดูเหมือนว่าจะมีมรดกนิดหน่อยใช่มั้ย ในตัวอย่างข้างต้น F ได้รับการสืบทอดอย่างสมบูรณ์โดยวัตถุความแข็งแรงของคอนสตรัคเตอร์ หากสิ่งนี้ไม่เพียงพอที่จะแสดงให้เห็นว่า A.Call (B) เป็นโหมดการสืบทอดแล้วลองดูการใช้งานที่สืบทอดมามากขึ้น
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น f () {
this.a = "A";
this.b = function () {
การแจ้งเตือน ("B");
-
-
ฟังก์ชั่น e () {
F.CALL (นี่);
-
var c = new e ();
การแจ้งเตือน (CA); // popt a
CB (); // popt b
ในตัวอย่างนี้ตราบใดที่เพื่อน ๆ ที่รู้วิธีใช้เบราว์เซอร์พวกเขาจะเห็นว่า E สืบทอดคุณสมบัติและวิธีการของ F อย่างสมบูรณ์มิฉะนั้นจะไม่ได้อธิบายเพราะคุณลักษณะ A และ B ไม่ได้กำหนดไว้ใน E จากนั้นตามสามัญสำนึกคุณสมบัติทั้งสองนี้จะไม่ปรากฏในวัตถุอินสแตนซ์ C ของ E