หนึ่งในข้อดีที่สำคัญของ Javascript นั้นได้รับการกล่าวขานว่าเป็นภาษาที่ใช้ต้นแบบ
แต่มันหมายความว่าอะไรที่ Javascript ใช้ต้นแบบและทำไมมันถึงได้เปรียบ?
หนึ่งในข้อดีที่สำคัญของ Javascript นั้นได้รับการกล่าวขานว่าเป็นภาษาที่ใช้ต้นแบบ
แต่มันหมายความว่าอะไรที่ Javascript ใช้ต้นแบบและทำไมมันถึงได้เปรียบ?
คำตอบ:
มรดก prototypalเป็นรูปแบบของเชิงวัตถุรหัสนำมาใช้ใหม่ Javascript เป็นหนึ่งในภาษาหลักเชิงวัตถุเท่านั้นที่จะใช้การสืบทอดต้นแบบ ภาษาเชิงวัตถุอื่นเกือบทั้งหมดเป็นแบบคลาสสิค
ในการสืบทอดคลาสสิกโปรแกรมเมอร์เขียนคลาสซึ่งกำหนดวัตถุ วัตถุหลายชิ้นสามารถสร้างอินสแตนซ์ได้จากคลาสเดียวกันดังนั้นคุณจึงมีรหัสในที่เดียวซึ่งอธิบายถึงวัตถุต่าง ๆ ในโปรแกรมของคุณ จากนั้นคลาสสามารถจัดเป็นลำดับชั้นได้ รหัสทั่วไปมากขึ้นจะถูกเก็บไว้ในระดับที่สูงกว่าซึ่งเป็นระดับที่ต่ำกว่าสืบทอด ซึ่งหมายความว่าวัตถุกำลังรหัสร่วมกับวัตถุอื่น ๆ ของคลาสเดียวกันเช่นเดียวกับกับผู้ปกครองชั้นเรียน
ในรูปแบบการสืบทอดต้นแบบวัตถุได้รับมรดกโดยตรงจากวัตถุอื่น ธุรกิจทั้งหมดเกี่ยวกับชั้นเรียนหมดไป หากคุณต้องการวัตถุคุณเพียงแค่เขียนวัตถุ แต่การนำโค้ดกลับมาใช้ยังคงเป็นสิ่งที่มีค่าดังนั้นวัตถุจึงได้รับอนุญาตให้เชื่อมโยงกันในลำดับชั้น ในจาวาสคริปต์ทุกวัตถุมีลิงค์ลับไปยังวัตถุที่สร้างขึ้นโดยสร้างเป็นห่วงโซ่ เมื่อวัตถุถูกถามหาคุณสมบัติที่ไม่มีวัตถุหลักของมันจะถูกถาม ... ต่อเนื่องขึ้นเรื่อย ๆ จนกระทั่งพบทรัพย์สินหรือจนกว่าจะถึงวัตถุราก
แต่ละฟังก์ชั่นในจาวาสคริปต์ (ซึ่งเป็นวัตถุเอง) จริง ๆ แล้วมีสมาชิกที่เรียกว่า "ต้นแบบ" ซึ่งมีหน้าที่รับผิดชอบในการให้ค่าเมื่อวัตถุถูกถามพวกเขา การมีสมาชิกนี้อนุญาตให้กลไกคอนสตรัคเตอร์ (โดยที่วัตถุถูกสร้างจากฟังก์ชั่น) ในการทำงาน การเพิ่มคุณสมบัติให้กับต้นแบบของฟังก์ชันวัตถุจะทำให้มันพร้อมใช้งานสำหรับวัตถุที่สร้างขึ้นรวมถึงวัตถุทั้งหมดที่สืบทอดจากมัน
ข้อดี
อาจไม่มีกฎที่ยากและรวดเร็วว่าทำไมการสืบทอดต้นแบบเป็นรูปแบบที่ได้เปรียบของการใช้รหัสซ้ำ การใช้รหัสซ้ำนั้นมีประโยชน์และการสืบทอดต้นแบบเป็นวิธีที่สมเหตุสมผลในการดำเนินการ คุณอาจจะเถียงว่ามรดก prototypal เป็นธรรมรูปแบบที่เรียบง่ายของรหัสที่นำมาใช้และรหัสที่สามารถนำกลับมาใช้อย่างมากในวิธีการโดยตรง แต่ภาษาคลาสสิกก็สามารถทำได้เช่นกัน
Sidenote: @Andrew Hedgesพูดได้ดีว่ามีภาษาต้นแบบหลายภาษา เป็นที่น่าสังเกตว่าคนเหล่านี้มีอยู่จริง แต่ก็ไม่ควรที่จะรู้ว่าไม่มีสิ่งใดที่ใกล้เคียงกับกระแสหลัก NewtonScript ดูเหมือนจะมีแรงฉุดอยู่พักหนึ่ง แต่ก็ตายด้วยแพลตฟอร์มของมัน นอกจากนี้ยังเป็นไปได้ที่จะขยายภาษาที่ทันสมัยในรูปแบบที่เพิ่มความสามารถต้นแบบ
ภาษาที่ใช้ต้นแบบไม่ได้สร้างความแตกต่างของคลาสกับวัตถุ: มันมีเพียงวัตถุ ภาษาที่ใช้ต้นแบบมีแนวคิดของวัตถุต้นแบบซึ่งเป็นวัตถุที่ใช้เป็นแม่แบบที่จะได้รับคุณสมบัติเริ่มต้นสำหรับวัตถุใหม่ วัตถุใด ๆ สามารถระบุคุณสมบัติของตัวเองได้ไม่ว่าคุณจะสร้างมันขึ้นมาหรือในขณะใช้งาน นอกจากนี้วัตถุใด ๆ ที่สามารถเชื่อมโยงได้เป็นต้นแบบสำหรับวัตถุอื่นทำให้วัตถุที่สองสามารถแบ่งปันคุณสมบัติของวัตถุแรก
การเขียนโปรแกรมแบบอิงต้นแบบเป็นรูปแบบของการเขียนโปรแกรมเชิงวัตถุที่ไม่มีคลาสและการใช้งานพฤติกรรมซ้ำ (หรือการสืบทอดในภาษาที่อิงกับคลาส) ดำเนินการโดยการโคลนวัตถุที่มีอยู่ซึ่งทำหน้าที่เป็นต้นแบบ
ข้อดี / ข้อเสียคือเราสามารถสร้างวัตถุชนิดใหม่ ณ รันไทม์โดยไม่จำเป็นต้องกำหนดคลาส (รหัสคงที่) เช่นเดียวกับฟีเจอร์ส่วนใหญ่นักพัฒนาไม่ควรเกินกว่าที่จะเปลี่ยนเป็นข้อดี / ข้อเสีย
ข้างต้นเป็นไปได้เพราะวัตถุนั้นมีฟังก์ชั่นเป็นหลักในจาวาสคริปต์ (ปิดด้วย)
แทนที่จะประกาศโครงสร้างคลาสคุณสามารถสร้างวัตถุประเภทเดียวกันและเพิ่มคำจำกัดความของพวกเขาได้ตลอดเวลาที่คุณต้องการใช้ต้นแบบของวัตถุ มีความยืดหยุ่นมากกว่าวิธีปกติในการทำสิ่งต่าง ๆ
หากคุณเพิ่งใช้อ็อบเจกต์ที่รันไทม์แทนคลาสที่คอมไพล์เพื่อสร้างออบเจกต์ใหม่สิ่งนี้จะเปิดโอกาสให้ขยายวัตถุโดยไม่ทราบรายละเอียดใด ๆ แน่นอนมันอาจกลายเป็นข้อเสียอย่างรวดเร็วขึ้นอยู่กับการใช้งาน ฉันไม่มีข้อสมมติฐานเกี่ยวกับภาษาที่นี่ดังนั้นจึงสามารถใช้ได้กับภาษาอื่นที่ไม่ใช่จาวาสคริปต์ซึ่งไม่ได้เป็นแบบไดนามิก
myobject.prototype=unkownobject;
myobject.newproperty=1;
คุณอาจได้วัตถุจากที่ใดก็ได้ รหัสของคุณเองจากเครือข่ายจากฐานข้อมูลจากลิงก์ภายนอกและอื่น ๆ
โปรดทราบว่าภาษาไม่จำเป็นต้องใช้การสืบทอดต้นแบบเช่น javascript ในจาวาสคริปต์วัตถุต้นแบบจะถูกแชร์เพียงอย่างเดียวดังนั้นคุณสมบัติของมันจึงอยู่ในหมู่ผู้รับ ทางเลือกคือการคัดลอกคุณสมบัติทั้งหมดของต้นแบบไปยังวัตถุใหม่ แต่ละวิธีมีจุดแข็งในสถานการณ์ต่าง ๆ ฉันชอบอันดับที่สองมากกว่า แต่ไม่ใช่จาวาสคริปต์ที่ทำ
หลังจากอ่านคำตอบทั้งหมดนี่คือข้อสรุป
1) การสืบทอดซึ่งวัตถุได้รับการถ่ายทอดโดยตรงจากวัตถุอื่น
2) นั่นไม่ได้ใช้คลาส
3) หรือที่เรียกว่าการเขียนโปรแกรมตามอินสแตนซ์หรือการเขียนโปรแกรมเชิงต้นแบบที่ไม่มีคลาส
4) การใช้พฤติกรรมซ้ำโดยการโคลนวัตถุที่มีอยู่ซึ่งทำหน้าที่เป็นต้นแบบ
5) วัตถุที่ใช้เป็นแม่แบบจากวัตถุใหม่จะได้รับคุณสมบัติเริ่มต้น