1. แบบจำลองโรงงาน
ฟังก์ชั่นบุคคล (ชื่ออายุ) {var p = วัตถุใหม่ (); p.name = ชื่อ; p.age = อายุ; P.ShowMessage = function () {console.log ("ชื่อ:"+this.name+"อายุ:"+this.age); } return p;} var p1 = บุคคล ("k1", 28); var p2 = บุคคล ("k2", 29); console.log (p1.showMessage == p2.showMessage); // เท็จข้อบกพร่องของรูปแบบจากโรงงานคือปัญหาของการจดจำวัตถุไม่ได้รับการแก้ไขและวิธีการแสดงของวัตถุแต่ละวัตถุไม่ใช่วิธีเดียวกัน (แต่ละวิธีจะถูกสร้างขึ้นใหม่ในแต่ละอินสแตนซ์ของวัตถุ) ซึ่งจะเพิ่มค่าใช้จ่าย
2. โหมดตัวสร้าง
ฟังก์ชั่นบุคคล (ชื่ออายุ) {this.name = name; this.age = อายุ; this.showMessage = function () {console.log ("ชื่อ:"+this.name+"อายุ:"+this.age); }} var p1 = บุคคลใหม่ ("k1", 28); var p2 = บุคคลใหม่ ("k2", 29); console.log (p1.showmessage == p2.showmessage); // เท็จรูปแบบคอนสตรัคเตอร์แก้ปัญหาการจดจำวัตถุ แต่วิธีการแสดงของแต่ละวัตถุไม่ใช่วิธีเดียวกัน (แต่ละวิธีจะถูกสร้างขึ้นใหม่ในแต่ละอินสแตนซ์ของวัตถุ) ซึ่งจะเพิ่มค่าใช้จ่าย
3. โหมดต้นแบบ
ฟังก์ชั่นบุคคล () {} person.prototype.name = "k"; person.prototype.age = 29; person.prototype.showMessage = function () {console.log ("ชื่อ:" this.name+"อายุ:" this.age); P2 = บุคคลใหม่ (); p2.ShowMessage (); // ชื่อ: K อายุ: 29console.log (P1.ShowMessage == P2.ShowMessage); // true -การอ้างอิงเป็นฟังก์ชั่นเดียวกัน console.log (person.prototype.isprototypeof (p1)); // trueconsole.log (object.getPrototypeof (p1) == person.prototype); // true trueรูปแบบต้นแบบแก้ปัญหาของ "แต่ละวิธีจะถูกสร้างขึ้นใหม่ในแต่ละอินสแตนซ์ของวัตถุ" และแก้ปัญหาการจดจำวัตถุ
ปัญหาใหญ่เกี่ยวกับโหมดต้นแบบคือวัตถุทั้งหมดตัวแปรและฟังก์ชั่นที่ติดตั้งภายใต้ต้นแบบของฟังก์ชั่นจะถูกแชร์โดยทุกกรณีของฟังก์ชั่น แม้ว่าคุณสมบัติของต้นแบบสามารถเข้าถึงได้ผ่านอินสแตนซ์ P1 และ P2 แต่ไม่สามารถแก้ไขค่าคุณสมบัติได้ ตัวอย่างเช่น p1.name = "k1" มันจะเพิ่มคุณสมบัติของชื่อ = "k1" บนอินสแตนซ์ P1 เท่านั้นและไม่เปลี่ยนเป็น prototype.name ไม่เป็นไรถ้าเป็นประเภทค่า แต่ถ้าเป็นประเภทอ้างอิงจะมีปัญหา ดูตัวอย่างต่อไปนี้
ฟังก์ชั่นบุคคล () {}; person.prototype.age = 10; person.prototype.array = [1,2,3]; var p1 = บุคคลใหม่ (); var p2 = บุคคลใหม่ (); console.log (p1.array); // [1,2,3] console.log (p2.array); // [2,2,3 likep1.array.push(4);P1 เพิ่มค่าให้กับอาร์เรย์ซึ่งสะท้อนให้เห็นใน P2 เพราะพวกเขาทั้งหมดชี้ไปที่อาร์เรย์เดียวกัน
4. การรวมโหมดตัวสร้างและโหมดต้นแบบ
นี่เป็นวิธีที่พบบ่อยที่สุดในการสร้างวัตถุโดยรวมข้อดีของตัวสร้างและรูปแบบต้นแบบ
ฟังก์ชั่นบุคคล (ชื่ออายุ) {this.name = name; this.age = age;} person.prototype.showMessage = function () {console.log ("ชื่อ:"+this.name+"อายุ:"+this.age);}; var p1 = บุคคลใหม่ ("k", 30); p1.showMessage ();5. โหมดต้นแบบไดนามิก
ทางออกหลักคือ: ห่อหุ้มข้อมูลทั้งหมดในคอนสตรัคเตอร์ซึ่งสอดคล้องกับแนวคิดของ OO มากขึ้น
ฟังก์ชั่นบุคคล (ชื่ออายุ) {this.name = name; this.age = อายุ; if (typeof this.showMessage! = "function") {person.prototype.showMessage = function () {console.log ("ชื่อ:"+this.name+"อายุ:"+this.age); }}} var p1 = บุคคลใหม่ ("k", 30); P1.ShowMessage ();6. รูปแบบตัวสร้างกาฝาก
ฟังก์ชั่นบุคคล (ชื่ออายุ) {var o = วัตถุใหม่ (); o.name = ชื่อ; O.AGE = อายุ; o.sayname = function () {console.log (this.name); - return o;} var p1 = บุคคลใหม่ ("k", 28); p1.sayname ();รูปแบบตัวสร้างกาฝากนั้นเหมือนกับรูปแบบของโรงงานยกเว้นว่ามีการใช้คำหลักใหม่เมื่อสร้างวัตถุ ตัวอย่างข้างต้น: var p1 = บุคคลใหม่ ("k", 28)
ฟังก์ชั่นหลักคือ: เพื่อขยายฟังก์ชั่นในตัวสร้างนี้ ตัวอย่างเช่นฉันต้องการกำหนดประเภทอาร์เรย์ myArray ซึ่งใช้อาร์เรย์อาร์เรย์และมีวิธีการของตัวเองดังนี้
ฟังก์ชั่น myArray () {ค่า var = new Array (); value.push.apply (ค่า, อาร์กิวเมนต์); // วิธีการที่กำหนดโดยตัวคุณเองค่า topipedstring = function () {return this.join ('|'); - ค่าส่งคืน;} var colours = new MyArray ("Red", "Blue", "Green"); console.log (colours.topipedstring ()); console.log (อินสแตนซ์สีของอาร์เรย์);7. โหมดตัวสร้างที่เสถียร
ตัวสร้างที่ปลอดภัยเป็นไปตามรูปแบบจากประเภทตัวสร้างกาฝาก แต่มีความแตกต่างสองประการ: หนึ่งไม่ควรใช้สิ่งนี้และอื่น ๆ ไม่ได้ใช้ใหม่เพื่อเรียกตัวสร้าง
ฟังก์ชั่นบุคคล (ชื่ออายุ) {var o = วัตถุใหม่ (); var tempage = อายุ; o.name = ชื่อ; O.AGE = อายุ; o.sayname = function () {console.log (ชื่อ); } o.sayage = function () {console.log (อุณหภูมิ); } return o;} var p1 = บุคคล ("k1", 28); p1.sayname (); // k1p1.sayage (); // 28p1.name = "k2"; p1.age = 30; p1.sayname (); // k1p1.sayage (); // 28เมื่อคุณเห็นผลลัพธ์ด้านบนคุณสามารถเข้าใจว่ารูปแบบวัตถุที่ปลอดภัยคืออะไร มันเป็นวัตถุที่สร้างขึ้นโดยใช้โหมดนี้ ไม่มีวิธีอื่นในการเปลี่ยนค่าที่ส่งผ่านในระหว่างการเริ่มต้น นี่คือบุคคล ("K1", 28) วัตถุดังกล่าวเป็นวัตถุที่ปลอดภัย ในความเป็นจริงมันเป็นการปิด JavaScript
การวิเคราะห์สั้น ๆ ข้างต้นเกี่ยวกับวิธีการสร้างวัตถุ JavaScript คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น