วิธีตัวสร้างมีประโยชน์มาก แต่มีหน่วยความจำเสีย
ฟังก์ชั่นที่กำหนดโดยต้นแบบจะถูกแชร์โดยวัตถุทั้งหมด
แอตทริบิวต์ที่กำหนดโดยต้นแบบนั้นเป็นอิสระ .---- หากคุณไม่ได้แก้ไขแอตทริบิวต์พวกเขาจะถูกแชร์
หากเราต้องการให้วัตถุทั้งหมดใช้ฟังก์ชั่นเดียวกันควรเพิ่มฟังก์ชั่นโดยใช้วิธีต้นแบบซึ่งจะช่วยประหยัดหน่วยความจำ
ตัวอย่าง:
// ---- โหมดคอนสตรัคเตอร์
เพิ่มแอตทริบิวต์ที่ไม่เปลี่ยนแปลง "ประเภท" ลงในวัตถุ CAT จากนั้นเพิ่มวิธีการกิน (หนูกิน) จากนั้นแมววัตถุต้นแบบจะกลายเป็นดังต่อไปนี้:
<script> ฟังก์ชั่น cat (ชื่อ, สี) {this.name = name; this.color = color; this.type = "feat"; this.eat = function () {Alert ("Eat Mouse"); - } // สร้างตัวอย่าง: var cat1 = แมวใหม่ ("ผมใหญ่", "เหลือง"); var cat2 = แมวใหม่ ("กินเออร์ผม", "ดำ"); แจ้งเตือน (cat1.type); // feat cat1.eat (); // กินการแจ้งเตือนเมาส์ (cat1.eat == cat2.eat); // false </script>นั่นคือสำหรับแต่ละวัตถุอินสแตนซ์แอตทริบิวต์ประเภทและวิธี EAT () เป็นเนื้อหาเดียวกัน ทุกครั้งที่มีการสร้างอินสแตนซ์จะต้องมีเนื้อหาซ้ำและครอบครองหน่วยความจำมากขึ้น นี่ไม่เป็นมิตรกับสิ่งแวดล้อมหรือมีประสิทธิภาพ
// ---- โหมดต้นแบบ
JavaScript กำหนดว่าแต่ละตัวสร้างมีแอตทริบิวต์ต้นแบบที่ชี้ไปที่วัตถุอื่น คุณสมบัติและวิธีการทั้งหมดของวัตถุนี้จะได้รับการสืบทอดโดยอินสแตนซ์ของตัวสร้าง
ซึ่งหมายความว่าเราสามารถกำหนดคุณสมบัติและวิธีการที่ไม่เปลี่ยนแปลงเหล่านั้นโดยตรงบนวัตถุต้นแบบ
<script> ฟังก์ชั่น cat (ชื่อ, สี) {this.name = name; this.color = color; } cat.prototype.type = "female"; cat.prototype.eat = function () {การแจ้งเตือน ("กินเมาส์")}; // สร้างอินสแตนซ์ var cat1 = แมวใหม่ ("ผมตัวใหญ่", "เหลือง"); var cat2 = แมวใหม่ ("2 ผม", "ดำ"); แจ้งเตือน (cat1.type); // cat cat1.eat (); // การกินการแจ้งเตือนของเมาส์ (cat1.eat == cat2.eat); // Truef </script>ในเวลานี้วิธีการประเภทและวิธีการ EAT () ของทุกกรณีเป็นที่อยู่หน่วยความจำซึ่งชี้ไปที่วัตถุต้นแบบดังนั้นจึงปรับปรุงประสิทธิภาพการทำงาน
การแนะนำข้างต้นเกี่ยวกับความแตกต่างระหว่าง JS Constructor และ Prototype Prototype คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น