Nền nhanh: Trong JavaScript, hàm tạo cho mỗi loại đối tượng có thuộc prototype
tính. Đề prototype
cập đến một đối tượng mà mỗi đối tượng được xây dựng sử dụng làm bước tiếp theo trong chuỗi nguyên mẫu của nó. Khi bạn muốn một loại vốn có từ loại khác, bạn có thể đặt prototype
loại con thành một thể hiện mới của loại cha.
Ví dụ:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
Câu hỏi của tôi hỏi về mã nào sẽ đi vào Some prototype object goes here
vị trí "" trong đoạn mã trên. Bản năng đầu tiên của tôi là xây dựng một thể hiện của cha mẹ (tức là new Parent()
), nhưng trong một nhận xét cho câu trả lời trên Đây có phải là cách an toàn để sao chép nguyên mẫu của một đối tượng sang một đối tượng khác không? , một người dùng viết:
Không, không sử dụng
new bar()
cho các đối tượng nguyên mẫu!
(... Đó là một ý kiến tôi đã thấy trong nhiều câu trả lời và bình luận của SO, nhưng đây là ví dụ duy nhất tôi có trong tay vào lúc này.)
Tùy chọn khác là sử dụng Object.create(Parent.prototype)
như Child.prototype
. Theo tôi biết, điều này cũng tạo ra một thể hiện mới Parent
, nhưng nó không chạy hàm Parent
tạo.
Ai đó có thể giải thích tại sao nên chạy hàm constructor khi tạo đối tượng nguyên mẫu từ kiểu cha không? Có một số vấn đề kỹ thuật quan trọng phát sinh (có thể với nhiều cấp độ thừa kế)? Hoặc một mô hình như vậy có phải là sự lạm dụng của các nhà xây dựng xung đột với một số thực tiễn tốt nhất về nguyên mẫu (ví dụ: chạy công cụ xây dựng khi tạo một nguyên mẫu vi phạm một số mối quan tâm)?
Object.create
là cách thực hiện.