บทความนี้อธิบายถึงการใช้ต้นแบบใน JS แบ่งปันสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
Phototype ใน JS เป็นส่วนที่ยากของ JS ที่จะเข้าใจ
บทความนี้ขึ้นอยู่กับจุดความรู้ต่อไปนี้:
โหมดการออกแบบต้นแบบ 1
ใน. NET คุณสามารถใช้ clone () เพื่อใช้วิธีการต้นแบบ
แนวคิดหลักของวิธีการต้นแบบคือตอนนี้มีคลาส A ฉันต้องการสร้างคลาส B คลาสนี้เป็นต้นแบบโดย A และสามารถขยายได้ เราเรียกต้นแบบของ B
2 วิธี JavaScript สามารถแบ่งออกเป็นสามประเภท:
เมธอดคลาส A
วิธีวัตถุ B
วิธีต้นแบบ C
ตัวอย่างมีดังนี้:
ฟังก์ชั่นคน (ชื่อ) {this.name = name; var p1 = คนใหม่ ("windking");3 OBJ1.FUNC.CALL (OBJ) วิธีการ
มันหมายถึงการพิจารณาว่า OBJ เป็น obj1 และเรียกวิธี Func
ตกลงปัญหาต่อไปนี้ได้รับการแก้ไขทีละคน:
ต้นแบบหมายถึงอะไร?
แต่ละวัตถุในจาวาสคริปต์มีแอตทริบิวต์ต้นแบบ
a.prototype = new b ();
การทำความเข้าใจต้นแบบไม่ควรสับสนกับการสืบทอด ต้นแบบของ A เป็นตัวอย่างของ B. สามารถเข้าใจได้ว่าการโคลนวิธีการและคุณสมบัติทั้งหมดใน B. A สามารถใช้วิธีการและคุณสมบัติของ B สิ่งที่เน้นที่นี่คือการโคลนนิ่งมากกว่าการสืบทอด สิ่งนี้สามารถเกิดขึ้นได้: ต้นแบบของ A เป็นตัวอย่างของ B และต้นแบบของ B ก็เป็นตัวอย่างของ A.
มาดูตัวอย่างการทดลอง:
ฟังก์ชั่น baseclass () {this.showmsg = function () {Alert ("baseclass :: showmsg");ก่อนอื่นเราจะกำหนดคลาส baseclass จากนั้นเราต้องการกำหนด extentclass แต่เราตั้งใจที่จะใช้อินสแตนซ์ของ baseclass เป็นต้นแบบไปยัง clone exterclass ยังมีวิธีการของวัตถุ showmsg
ExtendClass.prototype = ใหม่ baseclass () สามารถอ่านได้เป็น: ExterClass ถูกสร้างขึ้นด้วยอินสแตนซ์ของ baseclass เป็นการโคลนต้นแบบ
จากนั้นจะมีคำถามจะเกิดอะไรขึ้นถ้า ExtendClass มีวิธีการที่มีชื่อเดียวกับวิธี Baseclass?
นี่คือการทดลองขยาย 2:
ฟังก์ชั่น baseclass () {this.showmsg = function () {Alert ("baseclass :: showmsg"); :: showmsgหลักฐานการทดลอง: เมื่อฟังก์ชั่นกำลังทำงานอยู่มันจะไปที่ฟังก์ชั่นใน ontology เพื่อค้นหา หรือสามารถเข้าใจได้ว่าต้นแบบจะไม่ทำหน้าที่โคลนที่มีชื่อเดียวกัน
จากนั้นจะมีคำถามใหม่อื่น:
จะเป็นอย่างไรถ้าฉันต้องการใช้อินสแตนซ์ของอินสแตนซ์ ExtionClass เพื่อเรียกใช้วิธีการของ Baseclass 'showmsg
คำตอบคือใช้การโทร:
ExtendClass.prototype = ใหม่ baseclass (); var instance = new ExterctClass (); var baseinstance = baseclass ใหม่ (); baseinstance.showmsg.call (อินสแตนซ์); // แสดง baseclass :: showmsg
ที่นี่ baseinstance.showmsg.call (อินสแตนซ์);
ตกลงมีคนถามที่นี่ว่าทำไมไม่ Baseclass.showmsg.call (อินสแตนซ์);
นี่คือความแตกต่างระหว่างวิธีการของวัตถุและวิธีการเรียน
ในที่สุดหากมีการเข้าใจรหัสต่อไปนี้อย่างชัดเจนสิ่งที่บทความนี้บอกว่าเข้าใจแล้ว:
<script = "text/javascript"> baseclass () {this.showmsg = function () {การแจ้งเตือน ("baseclass :: showmsg"); ฟังก์ชั่น ExtendClass () {this.showmsg = function () {Alert ("ExtendClass :: showmsg"); }} ExtendClass.SHOWMSG = ฟังก์ชั่น () {การแจ้งเตือน ("ExtremClass :: showmsg static")} exterclass.prototype = ใหม่ baseclass (); แสดง ExtendClass :: showmsgbaseclass.showmsg.call (อินสแตนซ์); // แสดง baseclass :: showmsg staticvar baseinstance = ใหม่ baseclass (); baseinstance.showmsg.call (อินสแตนซ์); // แสดง baseclass :: showmsg </script>ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม JavaScript ของทุกคน