Trên thực tế, có một số cách để tạo các đối tượng trong JavaScript. Khi bạn chỉ muốn tạo một đối tượng, không có lợi ích gì khi tạo các đối tượng " dựa trên hàm tạo " bằng cách sử dụng toán tử " mới ". Nó giống như việc tạo một đối tượng bằng cú pháp " đối tượng theo nghĩa đen ". Nhưng các đối tượng " dựa trên hàm tạo" được tạo bằng toán tử " mới " sẽ sử dụng đáng kinh ngạc khi bạn đang nghĩ về " thừa kế nguyên mẫu ". Bạn không thể duy trì chuỗi kế thừa với các đối tượng được tạo bằng cú pháp bằng chữ. Nhưng bạn có thể tạo một hàm tạo , gắn các thuộc tính và phương thức vào nguyên mẫu của nó."Toán tử, nó sẽ trả về một đối tượng sẽ có quyền truy cập vào tất cả các phương thức và thuộc tính được đính kèm với nguyên mẫu của hàm xây dựng đó.
Dưới đây là một ví dụ về việc tạo một đối tượng bằng hàm constructor (xem phần giải thích mã ở phía dưới):
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();
Bây giờ, bạn có thể tạo nhiều đối tượng như bạn muốn bằng cách khởi tạo hàm xây dựng Person và tất cả chúng sẽ kế thừa fullname () từ nó.
Lưu ý: từ khóa " this " sẽ đề cập đến một đối tượng trống trong hàm constructor và bất cứ khi nào bạn tạo một đối tượng mới từ Person bằng toán tử " new ", nó sẽ tự động trả về một đối tượng chứa tất cả các thuộc tính và phương thức được đính kèm với từ khóa " this " . Và các đối tượng này chắc chắn sẽ kế thừa các phương thức và thuộc tính được gắn với nguyên mẫu của hàm xây dựng Person (đây là ưu điểm chính của phương pháp này).
Nhân tiện, nếu bạn muốn có được chức năng tương tự với cú pháp " đối tượng bằng chữ ", bạn sẽ phải tạo fullname () trên tất cả các đối tượng như dưới đây:
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();
Cuối cùng, nếu bây giờ bạn hỏi tại sao tôi nên sử dụng phương pháp tiếp cận hàm xây dựng thay vì cách tiếp cận theo nghĩa đen của đối tượng :
*** Kế thừa nguyên mẫu cho phép một chuỗi thừa kế đơn giản có thể vô cùng hữu ích và mạnh mẽ.
*** Nó tiết kiệm bộ nhớ bằng cách kế thừa các phương thức và thuộc tính phổ biến được xác định trong nguyên mẫu hàm xây dựng. Nếu không, bạn sẽ phải sao chép chúng nhiều lần trong tất cả các đối tượng.
Tôi hy vọng điều này có ý nghĩa.
a = new Object
,a = new Object()
,a = {}
, nghĩa đen là đơn giản hơn nhiều và một số xét nghiệm Tôi chạy một lúc trước nói nó là nhanh hơn, trình biên dịch mới hơn có thể đã gây ra tuyên bố của tôi là sai. Áp dụng tương tự cho các mảng theo nghĩa đen