แต่ละฟังก์ชัน JavaScript มีแอตทริบิวต์ต้นแบบ (วัตถุ JavaScript ไม่มีแอตทริบิวต์นี้) แอตทริบิวต์นี้หมายถึงวัตถุซึ่งเป็นวัตถุต้นแบบ JavaScript ช่วยให้เราสามารถแก้ไขวัตถุต้นแบบนี้ได้
มี 2 วิธีในการแก้ไข:
วิธีที่ 1: เพิ่มคุณสมบัติหรือวิธีการลงในวัตถุต้นแบบดั้งเดิม
ฟังก์ชันบุคคล () {} person.prototype.add = function () {Alert (this.name);}; person.prototype.name = "aty"; var p1 = บุคคลใหม่ (); p1.add (); // atyวิธีที่ 2: เขียนใหม่ (เขียนทับ) วัตถุต้นแบบ
function person () {} person.prototype = {add: function () {alert (this.name);}, ชื่อ: "aty"} var p2 = บุคคลใหม่ (); p2.add (); // atyคุณจะเห็นว่าสองวิธีข้างต้นสามารถปรับเปลี่ยนต้นแบบได้ดังนั้นความแตกต่างคืออะไร? วิธีการแนะนำวิธีใด
ฟังก์ชั่นบุคคล () {} ฟังก์ชั่นสัตว์ () {} var person = บุคคลใหม่ (); var iment = imple iment (); // แก้ไข person perso.prototype.say = function () {Alert ("Person");} // แก้ไข imay./person. personanimal.say (); // uncaught typeerror: undefined ไม่ใช่ฟังก์ชั่นหากคุณสร้างวัตถุก่อนจากนั้นแก้ไขต้นแบบถ้าคุณใช้เมธอด 1 วัตถุที่คุณสร้างขึ้นสามารถเข้าถึงต้นแบบที่แก้ไขได้อย่างถูกต้อง หากคุณใช้เมธอด 2 วัตถุที่คุณสร้างขึ้นไม่สามารถเข้าถึงต้นแบบที่แก้ไขได้ จากมุมมองนี้เห็นได้ชัดว่าวิธีที่ 1 ดีกว่าวิธีที่ 2 ทำไมสิ่งนี้ถึงเกิดขึ้น?
ฟังก์ชั่นบุคคล () {} ฟังก์ชั่นสัตว์ () {} var person = บุคคลใหม่ (); var iment = สัตว์ใหม่ (); แจ้งเตือน (บุคคล. __ proto__ === person.prototype); // truealert (สัตว์. __ proto__ === สัตว์ function () {Alert ("Person");} // แก้ไขต้นแบบ iment.prototype = {say: function () {การแจ้งเตือน ("บุคคล");}} การแจ้งเตือน (บุคคล.เห็นได้ชัดว่านี่คล้ายกับ "แก้ไขการอ้างอิง" และ "แก้ไขวัตถุที่ชี้ไปที่การอ้างอิง" ใน Java และเอฟเฟกต์ก็เหมือนกัน
คำอธิบายโดยละเอียดข้างต้นเกี่ยวกับความแตกต่างระหว่างการดัดแปลงและการเขียนใหม่ (overwrite) ของต้นแบบ JavaScript เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น