วิธีดั้งเดิมของโรงงานจาวาสคริปต์
เนื่องจากคุณสมบัติของอ็อบเจ็กต์สามารถกำหนดได้แบบไดนามิกหลังจากสร้างอ็อบเจ็กต์แล้ว โค้ดที่คล้ายกับโค้ดต่อไปนี้จึงถูกเขียนเมื่อ JavaScript ถูกนำมาใช้ครั้งแรก
คัดลอกรหัสรหัสดังต่อไปนี้:
var oCar = วัตถุใหม่;
oCar.color = "สีน้ำเงิน";
oประตูรถ = 4;
oCar.mpg = 25;
oCar.showColor = ฟังก์ชั่น() {
การแจ้งเตือน (this.color);
-
ในโค้ดข้างต้น object car จะถูกสร้างขึ้น จากนั้นให้ระบุคุณลักษณะบางประการ: เป็นสีฟ้า มีสี่ประตู และได้รับ 25 ไมล์ต่อแกลลอน จริงๆ แล้วแอตทริบิวต์สุดท้ายเป็นตัวชี้ไปยังฟังก์ชัน ซึ่งหมายความว่าแอตทริบิวต์นั้นเป็นวิธีการ หลังจากรันโค้ดนี้แล้ว ก็สามารถใช้ object car ได้ แต่มีปัญหาอยู่ที่นี่ นั่นคือ คุณอาจต้องสร้างรถยนต์หลายรายการ ซึ่งเห็นได้ชัดว่าไม่ใช่วิธีที่ดี
วิธีแก้ปัญหา: วิธีการจากโรงงาน
เพื่อแก้ไขปัญหานี้ นักพัฒนาได้สร้างฟังก์ชันจากโรงงานที่สร้างและส่งคืนออบเจ็กต์ประเภทเฉพาะ ตัวอย่างเช่น ฟังก์ชัน createCar() สามารถใช้เพื่อสรุปการดำเนินการที่สร้างรายการก่อนหน้าของการสร้างอ็อบเจ็กต์ car:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น createCar (sColor, iDoors, iMpg) {
var oTempCar = วัตถุใหม่;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = ฟังก์ชั่น() {
การแจ้งเตือน (this.color);
-
กลับ oTempCar;
-
var oCar1 = createCar("สีแดง",4,23);
var oCar2 = createCar("สีน้ำเงิน",3,25);
oCar1.showColor(); //เอาต์พุต "สีแดง"
oCar2.showColor(); //เอาต์พุต "สีน้ำเงิน"
การเรียกใช้ฟังก์ชันโรงงานนี้จะสร้างออบเจ็กต์ใหม่และกำหนดคุณสมบัติที่จำเป็นทั้งหมดให้กับมัน เพิ่มพารามิเตอร์ให้กับฟังก์ชัน createCar() เพื่อกำหนดค่าให้กับสี ประตู และแอตทริบิวต์ mpg ของออบเจ็กต์รถยนต์ที่จะสร้าง ซึ่งทำให้วัตถุสองชิ้นมีคุณสมบัติเหมือนกัน แต่มีค่าคุณสมบัติต่างกัน สิ่งที่ไม่ดีเกี่ยวกับวิธีการนี้คือทุกครั้งที่มีการสร้างวัตถุรถยนต์ (นั่นคือ ฟังก์ชัน createCar จะถูกเรียกใช้หนึ่งครั้ง) วิธีการ showColor จะถูกสร้างขึ้นซ้ำๆ สำหรับแต่ละวัตถุ ซึ่งจริงๆ แล้ว แต่ละวัตถุจะใช้ร่วมกัน การทำงาน. . ดังนั้นเราจึงพยายามประกาศคุณลักษณะของวิธีการนอกฟังก์ชัน
กำหนดวิธีการวัตถุนอกฟังก์ชั่นโรงงาน
นักพัฒนาบางรายหลีกเลี่ยงปัญหานี้โดยการกำหนดวิธีการของออบเจ็กต์ภายนอกฟังก์ชันจากโรงงาน จากนั้นชี้ไปที่วิธีการผ่านคุณสมบัติ:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น showColor() {
การแจ้งเตือน (this.color);
-
ฟังก์ชั่น createCar (sColor, iDoors, iMpg) {
var oTempCar = วัตถุใหม่;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
กลับ oTempCar;
-
var oCar1 = createCar("สีแดง",4,23);
var oCar2 = createCar("สีน้ำเงิน",3,25);
oCar1.showColor(); //เอาต์พุต "สีแดง"
oCar2.showColor(); //เอาต์พุต "สีน้ำเงิน"
ในโค้ดที่เขียนใหม่ข้างต้น ฟังก์ชัน showColor() จะถูกกำหนดก่อนฟังก์ชัน createCar() ภายใน createCar() วัตถุจะได้รับตัวชี้ไปยังฟังก์ชัน showColor() ที่มีอยู่ ในทางปฏิบัติ วิธีนี้จะช่วยแก้ปัญหาการสร้างวัตถุฟังก์ชันซ้ำๆ แต่ในทางความหมาย ฟังก์ชันจะดูไม่เหมือนวิธีการของวัตถุ