จริงๆแล้วมีหลายวิธีในการสร้างวัตถุใน JavaScript เมื่อคุณต้องการสร้างวัตถุไม่มีประโยชน์ในการสร้างวัตถุที่ใช้ "คอนสตรัคเตอร์ " โดยใช้ตัวดำเนินการ " ใหม่ " มันเหมือนกับการสร้างวัตถุโดยใช้ไวยากรณ์" object literal " แต่วัตถุ "ที่ยึดตามคอนสตรัคเตอร์ " ที่สร้างขึ้นด้วยตัวดำเนินการ " ใหม่ " มาถึงการใช้งานอย่างไม่น่าเชื่อเมื่อคุณกำลังคิดเกี่ยวกับ "การสืบทอดต้นแบบ " คุณไม่สามารถรักษาห่วงโซ่การสืบทอดด้วยวัตถุที่สร้างขึ้นด้วยไวยากรณ์ที่แท้จริง แต่คุณสามารถสร้างฟังก์ชั่นคอนสตรัค , แนบคุณสมบัติและวิธีการกับต้นแบบของมัน"โอเปอเรเตอร์มันจะคืนค่าออบเจกต์ซึ่งจะสามารถเข้าถึงเมธอดและคุณสมบัติทั้งหมดที่แนบมากับต้นแบบของฟังก์ชันคอนสตรัคเตอร์นั้น
นี่คือตัวอย่างของการสร้างวัตถุโดยใช้ฟังก์ชั่นตัวสร้าง (ดูคำอธิบายรหัสที่ด้านล่าง):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
ตอนนี้คุณสามารถสร้างวัตถุได้มากเท่าที่คุณต้องการโดยการสร้างฟังก์ชั่นการสร้างคนทันทีและวัตถุทั้งหมดจะสืบทอดชื่อเต็ม () จากมัน
หมายเหตุ: " นี้ " คำหลักจะอ้างถึงวัตถุที่ว่างเปล่าภายในฟังก์ชั่นคอนสตรัคและเมื่อใดก็ตามที่คุณสร้างวัตถุใหม่จากคนใช้ " ใหม่ " ผู้ประกอบการก็จะกลับวัตถุที่มีทั้งหมดของคุณสมบัติและวิธีการที่แนบมากับ " นี้ " คำหลัก . และวัตถุเหล่านี้จะได้รับสืบทอดวิธีการและคุณสมบัติที่แนบมากับต้นแบบของฟังก์ชันตัวสร้างบุคคล (ซึ่งเป็นข้อได้เปรียบหลักของวิธีนี้)
โดยวิธีการถ้าคุณต้องการได้รับฟังก์ชั่นเดียวกันกับไวยากรณ์" วัตถุตัวอักษร " คุณจะต้องสร้างชื่อเต็ม () ในทุกวัตถุดังต่อไปนี้:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
ในที่สุดถ้าคุณถามว่าทำไมฉันควรใช้วิธีการสร้างฟังก์ชั่นของตัวแทนที่จะเป็นวิธีการตามตัวอักษรวัตถุ :
*** การถ่ายทอดทาง Prototypal ทำให้การสืบทอดสายโซ่เป็นเรื่องง่ายซึ่งมีประโยชน์และมีประสิทธิภาพอย่างมาก
*** มันช่วยประหยัดหน่วยความจำโดยการสืบทอดวิธีการทั่วไปและคุณสมบัติที่กำหนดไว้ในฟังก์ชั่นต้นแบบการสร้าง มิฉะนั้นคุณจะต้องคัดลอกมันซ้ำแล้วซ้ำอีกในวัตถุทั้งหมด
ฉันหวังว่านี่จะสมเหตุสมผล
a = new Object
,a = new Object()
,a = {}
, อักษรง่ายมากและการทดสอบบางอย่างที่ฉันวิ่งในขณะที่ที่ผ่านมาบอกว่ามันจะเร็วขึ้นคอมไพเลอร์รุ่นใหม่อาจจะเกิดจากคำสั่งของฉันเป็นเท็จ เช่นเดียวกันกับอาร์เรย์ตามตัวอักษร