ฟังก์ชั่น: ต้นแบบ
ตัวสร้างแต่ละตัวมีคุณสมบัติที่เรียกว่า Prototype (ต้นแบบไม่แปลด้านล่างอีกต่อไปใช้ข้อความต้นฉบับ) คุณสมบัตินี้มีประโยชน์มาก: ประกาศตัวแปรหรือฟังก์ชั่นทั่วไปสำหรับคลาสเฉพาะ
คำจำกัดความของต้นแบบ
คุณไม่จำเป็นต้องประกาศคุณสมบัติต้นแบบอย่างชัดเจนเพราะมีอยู่ในทุกตัวสร้าง คุณสามารถดูตัวอย่างต่อไปนี้:
ตัวอย่าง pt1
การคัดลอกรหัสมีดังนี้:
การทดสอบฟังก์ชั่น ()
-
-
การแจ้งเตือน (test.prototype); // เอาต์พุต "วัตถุ"
เพิ่มคุณสมบัติลงในต้นแบบ
อย่างที่คุณเห็นด้านบนต้นแบบเป็นวัตถุดังนั้นคุณสามารถเพิ่มคุณสมบัติให้กับมันได้ แอตทริบิวต์ที่คุณเพิ่มลงในต้นแบบจะกลายเป็นแอตทริบิวต์ทั่วไปสำหรับวัตถุที่สร้างขึ้นโดยใช้ตัวสร้างนี้
ตัวอย่างเช่นฉันมีปลาชนิดข้อมูลด้านล่างและฉันต้องการให้ปลาทั้งหมดมีคุณสมบัติเหล่านี้: LivesIn = "น้ำ" และราคา = 20; เพื่อให้บรรลุสิ่งนี้ฉันสามารถเพิ่มคุณสมบัติเหล่านั้นลงในต้นแบบของปลาคอนสตรัคเตอร์
ตัวอย่าง pt2
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นปลา (ชื่อสี)
-
this.name = ชื่อ;
this.color = color;
-
fish.prototype.livesin = "น้ำ";
fish.prototype.price = 20;
ต่อไปให้ทำปลาสองสามตัว:
การคัดลอกรหัสมีดังนี้:
var fish1 = ปลาใหม่ ("Mackarel", "Grey");
var fish2 = ปลาใหม่ ("ปลาทอง", "สีส้ม");
var fish3 = ปลาใหม่ ("ปลาแซลมอน", "ขาว");
มาดูกันว่าคุณสมบัติของปลาคืออะไร:
การคัดลอกรหัสมีดังนี้:
สำหรับ (int i = 1; i <= 3; i ++)
-
var fish = eval_r ("fish"+i); // ฉันเพิ่งได้ตัวชี้ไปที่ปลาตัวนี้
การแจ้งเตือน (fish.name+","+fish.color+","+fish.livesin+","+fish.price);
-
ผลลัพธ์ควรเป็น:
การคัดลอกรหัสมีดังนี้:
"Mackarel, Grey, Water, 20"
"ปลาทอง, ส้ม, น้ำ, 20"
"ปลาแซลมอน, น้ำสีขาว, 20"
คุณจะเห็นว่าปลาทุกตัวมีคุณสมบัติในชีวิตและราคาและเราไม่ได้ประกาศคุณลักษณะเหล่านี้สำหรับปลาแต่ละตัวโดยเฉพาะ ในเวลานี้เมื่อมีการสร้างวัตถุตัวสร้างจะกำหนดต้นแบบแอตทริบิวต์ให้กับแอตทริบิวต์ภายในของวัตถุใหม่ __proto__ __proto__ นี้ถูกใช้โดยวัตถุนี้เพื่อค้นหาคุณสมบัติของมัน
คุณยังสามารถใช้ต้นแบบเพื่อเพิ่มฟังก์ชั่นทั่วไปให้กับวัตถุทั้งหมด สิ่งนี้มีข้อได้เปรียบอย่างหนึ่ง: คุณไม่จำเป็นต้องสร้างและเริ่มต้นฟังก์ชั่นนี้ทุกครั้งที่คุณสร้างวัตถุ เพื่ออธิบายสิ่งนี้ลองดูตัวอย่าง DT9 อีกครั้งและเขียนใหม่โดยใช้ต้นแบบ:
ใช้ต้นแบบเพื่อเพิ่มฟังก์ชั่นลงในวัตถุ
ตัวอย่าง pt3
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นพนักงาน (ชื่อเงินเดือน)
-
this.name = ชื่อ;
this.salary = เงินเดือน;
-
Exployee.prototype.getSalary = ฟังก์ชั่น GetAlaryFunction ()
-
คืนสิ่งนี้ซาลารี;
-
พนักงาน. prototype.addsalary = ฟังก์ชั่น addsalaryfunction (เพิ่มเติม)
-
this.salary = this.salary+เพิ่มเติม;
-
เราสามารถสร้างวัตถุตามปกติ:
การคัดลอกรหัสมีดังนี้:
var boss1 = พนักงานใหม่ ("Joan", 200000);
var boss2 = พนักงานใหม่ ("Kim", 100000);
VAR BOSS3 = พนักงานใหม่ ("SAM", 150000);
และตรวจสอบ:
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน (boss1.getSalary ()); // output 200000
การแจ้งเตือน (boss2.getSalary ()); // เอาท์พุท 100000
การแจ้งเตือน (boss3.getSalary ()); // เอาท์พุท 150000
นี่คือไดอะแกรมเพื่อแสดงให้เห็นว่าต้นแบบทำงานอย่างไร แต่ละอินสแตนซ์ของวัตถุนี้ (BOSS1, BOSS2, BOSS3) มีคุณสมบัติภายในที่เรียกว่า __Proto__ ซึ่งชี้ไปที่ต้นแบบทรัพย์สินของคอนสตรัคเตอร์ (พนักงาน) เมื่อคุณเรียกใช้งาน Getalary หรือ Addsalary วัตถุนี้จะค้นหาและเรียกใช้งานรหัสนี้ใน __proto__ หมายเหตุสิ่งนี้: ไม่มีสำเนาของรหัสที่นี่ (เปรียบเทียบกับแผนภูมิตัวอย่าง DT8)