ฉันใช้ JS เพื่อเขียนวิธีการเชิงวัตถุที่ชอบธรรมในตัวเอง ฉันพบปัญหาซึ่งก็คือการกำหนดวิธีการดังนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น ListCommon2 (ครั้งแรก, สอง, สาม)
-
this.first = function ()
-
การแจ้งเตือน ("First Do"+ก่อน);
-
-
ListCommon2.do1 = ฟังก์ชั่น (ครั้งแรก)
-
// this.first ();
การแจ้งเตือน ("First Do"+ก่อน);
-
ListCommon2.prototype.do2 = ฟังก์ชั่น (ครั้งแรก)
-
// this.first ();
การแจ้งเตือน ("First Do"+ก่อน);
-
ความแตกต่างระหว่างสองวิธีคืออะไร? ฟังก์ชั่นของการใช้ต้นแบบคืออะไร?
รหัสทดสอบ:
การคัดลอกรหัสมีดังนี้:
var t1 = new ListCommon2 ("ต้มน้ำ 1", "Brew Tea 1", "Drink 1");
// t1.do1 (); // มีข้อผิดพลาดเกิดขึ้นเมื่อมีการโทร
ListCommon2.do1 ("น้ำต้ม 1");
var t2 = ใหม่ listcommon2 ("ต้มน้ำ 2", "ซื้อชา 2", "เครื่องดื่ม 2");
t2.do2 ("น้ำเดือด 2"); //
// listcommon2.do2 ("ต้มน้ำ 1"); // เกิดข้อผิดพลาดในการโทร
หลังจากการทดสอบพบว่าวิธีการที่ไม่ได้ใช้ต้นแบบนั้นเทียบเท่ากับวิธีการคงที่ของชั้นเรียนดังนั้นจึงสามารถเรียกได้ด้วยวิธีนี้ ListCommon2.do1 ("น้ำเดือด 1"); หากเรียกด้วยวิธีนี้ข้อผิดพลาดจะเกิดขึ้น t1.do1 ();
ในทางตรงกันข้ามวิธีการที่ใช้ต้นแบบนั้นเทียบเท่ากับวิธีการอินสแตนซ์ของคลาสและไม่สามารถใช้หลังจากใหม่ ListCommon2.do2 ("ต้มน้ำ 1"); สิ่งนี้จะทำให้เกิดข้อผิดพลาด
สรุป: วิธีการที่กำหนดโดยใช้ต้นแบบเทียบเท่ากับวิธีการอินสแตนซ์ของคลาสและจะต้องใช้หลังจากใหม่ ข้อ จำกัด ของฟังก์ชั่นที่สามารถเรียกได้ในฟังก์ชั่นจะคล้ายกับข้อ จำกัด ของวิธีการอินสแตนซ์ของคลาส
การใช้วิธีการที่กำหนดโดยไม่ต้องใช้ต้นแบบเทียบเท่ากับวิธีการคงที่ของคลาส คุณสามารถใช้โดยตรงโดยไม่ต้องใหม่ ข้อ จำกัด ของฟังก์ชั่นที่สามารถเรียกได้ในฟังก์ชั่นจะคล้ายกับข้อ จำกัด ของวิธีการคงที่ของคลาส
ตัวอย่างเช่น this.first () ไม่สามารถเรียกได้;