1. ตัวสร้างคืออะไร
ตัวสร้างเป็นเรื่องธรรมดามากในภาษาที่มุ่งเน้นวัตถุเช่น Java, C ++ และ PHP ใน JavaScript ตัวสร้างเป็นฟังก์ชันปกติแรกซึ่งสามารถเรียกใช้โดยใช้ตัวดำเนินการใหม่และสร้างวัตถุประเภทพิเศษ
การคัดลอกรหัสมีดังนี้:
// "เบนจามิน" เป็นตัวสร้าง
var benjamin = นิวเบนจามิน ("zuojj", "ชาย");
ในตัวอย่างข้างต้นเบนจามินเป็นวัตถุเบนจามินดังนั้นมันจะสร้างอินสแตนซ์ได้อย่างไร?
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Benjamin (ชื่อผู้ใช้เพศ) {
this.username = ชื่อผู้ใช้;
this.sex = เพศ;
-
var benjamin = นิวเบนจามิน ("zuojj", "ชาย");
// outputs: benjamin {sex: "male", ชื่อผู้ใช้: "zuojj"}
console.log (เบนจามิน);
อย่างที่เราเห็นตัวสร้าง "เบนจามิน" ได้รับพารามิเตอร์ที่ผ่านและกำหนดให้กับวัตถุนี้ นี่เป็นเพราะเมื่อตัวสร้างถูกเรียกโดยตัวดำเนินการใหม่ตัวสร้างวัตถุนี้จะถูกกำหนดให้กับวัตถุที่ส่งคืนโดยการดำเนินการใหม่
ซึ่งหมายความว่ารหัสข้างต้นเทียบเท่ากับ:
การคัดลอกรหัสมีดังนี้:
Benjamin = {
"ชื่อผู้ใช้": "zuojj"
"เพศ": "ชาย"
-
2. ทำไมต้องใช้ตัวสร้าง
มีสาเหตุหลายประการที่ใช้ตัวสร้าง:
1. การใช้ตัวสร้างหมายความว่าวัตถุทั้งหมดเหล่านี้สามารถสร้างได้โดยใช้โครงสร้างพื้นฐานเดียวกัน
2. การใช้ตัวสร้างหมายความว่าวัตถุ "เบนจามิน" ถูกทำเครื่องหมายไว้อย่างชัดเจนว่าเป็นอินสแตนซ์ของฟังก์ชัน "เบนจามิน"
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Benjamin (ชื่อผู้ใช้เพศ) {
this.username = ชื่อผู้ใช้;
this.sex = เพศ;
-
var benjamin = นิวเบนจามิน ("zuojj", "ชาย");
var ben = {
"ชื่อผู้ใช้": "zuojj"
"เพศ": "ชาย"
-
// เอาต์พุต: จริง
console.log (อินสแตนซ์เบนจามินของเบนจามิน);
// เอาต์พุต: เท็จ
console.log (เบ็นอินสแตนซ์ของเบนจามิน);
3. การใช้ตัวสร้างหมายความว่าเราสามารถกำหนดวิธีการสาธารณะบนต้นแบบสำหรับการแบ่งปันหลายอินสแตนซ์
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Benjamin (ชื่อผู้ใช้เพศ) {
this.username = ชื่อผู้ใช้;
this.sex = เพศ;
-
benjamin.prototype.getName = function () {
ส่งคืนสิ่งนี้ชื่อผู้ใช้;
-
var benjamin = นิวเบนจามิน ("zuojj", "ชาย");
var ben = นิวเบนจามิน ("มะนาว", "หญิง");
// outputs: zuojj
console.log (benjamin.getName ());
// เอาต์พุต: มะนาว
console.log (ben.getName ());
3. สิ่งที่ควรทราบ
1. คำหลักใหม่
เมื่อสร้างอินสแตนซ์ตัวสร้างคุณต้องไม่ลืมใช้คำหลักใหม่ ไม่ว่าจะใช้คำหลักใหม่จะมีผลกระทบอย่างมากต่อวัตถุนี้ หากไม่มีคำหลักใหม่วัตถุนี้จะชี้ไปที่วัตถุทั่วโลก (หน้าต่างในเบราว์เซอร์และโกลบอลในโหนด) ดังนั้นเมื่อกำหนดคอนสตรัคเตอร์ขอแนะนำว่าตัวอักษรตัวแรกของชื่อฟังก์ชั่นจะเป็นตัวพิมพ์ใหญ่
2. หากฟังก์ชั่นที่เรียกว่าไม่มีนิพจน์การส่งคืนที่ชัดเจนวัตถุนี้จะถูกส่งคืนโดยปริยายซึ่งเป็นวัตถุที่สร้างขึ้นใหม่ มิฉะนั้นผลลัพธ์จะได้รับผลกระทบ แต่เฉพาะในกรณีที่วัตถุที่ส่งคืนเป็น
การคัดลอกรหัสมีดังนี้:
แถบฟังก์ชัน () {
กลับ 2;
-
var bar = แถบใหม่ ();
// ส่งคืนวัตถุที่สร้างขึ้นใหม่
// outputs: bar {}
console.log (บาร์);
ฟังก์ชั่นทดสอบ () {
this.value = 2;
กลับ {
Foo: 1
-
-
การทดสอบ var = การทดสอบใหม่ ();
// วัตถุที่ส่งคืน
// เอาต์พุต: วัตถุ {foo: 1}
console.log (ทดสอบ);
สิ่งที่เราต้องใส่ใจคือ:
a) แถบใหม่ () ส่งคืนวัตถุที่สร้างขึ้นใหม่ไม่ใช่ค่าตัวอักษรของหมายเลข 2 ดังนั้นแถบใหม่ (). constructor === bar แต่ถ้าวัตถุหมายเลขที่ส่งคืนผลลัพธ์จะแตกต่างกัน
b) การทดสอบใหม่ () ที่ได้รับที่นี่เป็นวัตถุที่ส่งคืนโดยฟังก์ชั่นไม่ใช่วัตถุที่สร้างขึ้นใหม่ผ่านคำหลักใหม่ดังที่แสดงด้านล่าง:
การคัดลอกรหัสมีดังนี้:
แถบฟังก์ชัน () {
กลับ 2;
-
var bar = แถบใหม่ ();
Function Barn () {
ส่งคืนหมายเลขใหม่ (2);
-
var barn = new barn ();
// เอาต์พุต: จริง
console.log (bar.constructor === bar);
// outputs: number {}
console.log (ยุ้งฉาง);
// ouputs: เท็จ
console.log (Barn.Constructor === Barn);
// เอาต์พุต: จริง
console.log (barn.constructor === จำนวน);
-
ฟังก์ชั่นทดสอบ () {
this.value = 2;
กลับ {
Foo: 1
-
-
การทดสอบ var = การทดสอบใหม่ ();
// เอาต์พุต: ไม่ได้กำหนด
console.log (test.value);
// ouputs: 1
console.log (test.foo);
ข้างต้นเป็นบทสรุปของตัวสร้าง ฉันหวังว่ามันจะเป็นประโยชน์สำหรับผู้เริ่มต้น หากมีประเด็นที่ไม่เหมาะสมในบทความฉันหวังว่าจะวิพากษ์วิจารณ์และแก้ไขพวกเขา