ในบทความก่อนหน้านี้วัตถุและต้นแบบใน JavaScript (i) กล่าวถึงการดำเนินการพื้นฐานบางอย่างในการสร้างวัตถุใน JavaScript และจะยังคงหารือเกี่ยวกับพวกเขาต่อไป
รุ่นโรงงานหนึ่งรุ่น
เรารู้ว่าการสร้างวัตถุที่เราสามารถใช้รหัสต่อไปนี้:
var user = new Object (); // สร้างวัตถุโดยใช้ตัวดำเนินการใหม่ user.name = 'ท่องบนทะเลสาบสามเหลี่ยม'; // เพิ่มแอตทริบิวต์ให้กับ Object user.age = 22; user.address = 'Hubei Wuhan'; การแจ้งเตือน (user.name + "" + user.age); // กลับ 'ท่องบนทะเลสาบสามเหลี่ยม' Hubei Wuhan '
การสร้างวัตถุด้วยวิธีนี้เป็นเรื่องง่ายและใช้งานง่ายและเป็นวิธีพื้นฐานที่สุดในการสร้างวัตถุใน JavaScript แต่มีปัญหาเช่นนี้ถ้าเราต้องการสร้างวัตถุหลายอย่างฉันต้องเขียนโค้ดที่ซ้ำกันจำนวนมาก ตัวอย่างเช่นหากเราต้องการสร้าง Object Object User1 เราต้องเขียนโค้ดข้างต้นอีกครั้งซึ่งไม่เหมาะสมในกระบวนการพัฒนาจริง ด้วยวิธีนี้หากมีวัตถุมากเกินไปจำนวนรหัสจะเพิ่มขึ้นอย่างมาก
เพื่อแก้ปัญหาดังกล่าวเราสามารถใช้วิธีการที่เรียกว่ารูปแบบโรงงานซึ่งคือการแก้ปัญหาของวัตถุอินสแตนซ์ที่สร้างรหัสซ้ำจำนวนมาก
ฟังก์ชั่นสร้าง (ชื่อ, อายุ) {var obj = วัตถุใหม่ (); obj.name = ชื่อ; obj.age = อายุ; obj.run = function () {return this.name + '' + this.age; - ส่งคืน obj;} var obj1 = สร้าง ('zxc', 10); // อินสแตนซ์แรก var obj2 = สร้าง ('cxz', 20); // การแจ้งเตือนอินสแตนซ์ครั้งที่สอง (obj1.run ()); การแจ้งเตือน (obj1.run ());จากรหัสข้างต้นเราจะเห็นว่ารูปแบบโรงงานแก้ปัญหาของการทำซ้ำรหัสขนาดใหญ่ระหว่างการสร้างอินสแตนซ์ แต่ปัญหาอื่นเกิดขึ้นนั่นคือการระบุปัญหาเราไม่สามารถหาวัตถุที่พวกเขาเป็นวัตถุได้ ตัวอย่างเช่น
การแจ้งเตือน (typeof obj1); // ObjectAlert (OBJ1 อินสแตนซ์ของวัตถุ); //จริง
รหัสข้างต้นระบุว่า Box1 เป็นวัตถุวัตถุ แต่เราไม่สามารถรู้ได้ว่าวัตถุใดถูกสร้างขึ้น
สองคอนสตรัคเตอร์ (วิธีการก่อสร้าง)
เพื่อแก้ปัญหาข้างต้นเราสามารถใช้ตัวสร้างเพื่อสร้างวัตถุ ความแตกต่างเพียงอย่างเดียวระหว่างตัวสร้างและฟังก์ชั่นปกติคือวิธีการโทรแตกต่างกัน อย่างไรก็ตามตัวสร้างก็เป็นฟังก์ชั่น
ฟังก์ชันผู้ใช้ (ชื่อ, อายุ) {// โหมดตัวสร้าง this.name = name; this.age = อายุ; this.run = function () {return this.name + '' + this.age; -เพียงแค่ใช้ตัวดำเนินการใหม่เมื่อสร้างวัตถุ:
var user1 = ผู้ใช้ใหม่ ('zxc', 25); var user2 = ผู้ใช้ใหม่ ('cxz', 22);ตอนนี้เราสามารถตรวจพบได้ว่า User1 หรือ User2 เป็นของผู้ใช้หรือไม่
การแจ้งเตือน (ผู้ใช้ user1 instanceof); // true
จะเห็นได้ว่าการใช้วิธีตัวสร้างจะช่วยแก้ปัญหาของการสร้างอินสแตนซ์ซ้ำ ๆ และแก้ปัญหาการจดจำวัตถุ
กระบวนการดำเนินการเมื่อใช้ตัวสร้างมีดังนี้:
1. เมื่อดำเนินการคอนสตรัคเตอร์ใหม่ () พื้นหลังจะดำเนินการวัตถุใหม่ ();
2. ขอบเขตตัวสร้างกับวัตถุใหม่
3. เรียกใช้รหัสภายในตัวสร้าง;
4. พื้นหลังส่งคืนวัตถุใหม่โดยตรง
ถัดไปลองดูที่ปัญหาฟังก์ชั่นภายในตัวสร้าง หากเราดำเนินการคำสั่งต่อไปนี้:
การแจ้งเตือน (user1.run == user2.run); // ผลลัพธ์ที่ส่งกลับเท็จ
ผลลัพธ์จะส่งคืนเท็จซึ่งหมายความว่าวิธีการนั้นเป็นที่อยู่อ้างอิง หากเราสร้างวัตถุหลายชิ้นซ้ำ ๆ วิธีการในแต่ละวัตถุจะเปิดพื้นที่ใหม่ในหน่วยความจำซึ่งจะเสียพื้นที่มากขึ้น ในการแก้ปัญหานี้เราจำเป็นต้องใช้การแบ่งปันคุณสมบัติหรือวิธีการของอินสแตนซ์ เราจะหารือเกี่ยวกับการแก้ปัญหานี้ในบทความถัดไป
ด้านบนเป็นวัตถุและต้นแบบในจาวาสคริปต์แนะนำให้คุณทราบโดยตัวแก้ไข (II) ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!