Dài câu chuyện ngắn: chức năng có nghĩa là cho new
có prototype
, trường hợp đối tượng không.
Có lẽ tôi sẽ thất bại về độ chính xác khi nói điều này, nhưng prototype
là thứ chỉ áp dụng cho những gì bạn có thể gọi hàm dựng, đó là các hàm được gọi với new
để tạo các phiên bản. Nguyên mẫu có thể được coi là mẫu cho cá thể kết quả.
Đối với đối tượng kết quả, prototype
là không thuộc tính. Thay vào đó, các thuộc tính trong nguyên mẫu của hàm tạo có sẵn dưới dạng thuộc tính trên cá thể đã được tạo. Có nghĩa là khi bạn tra cứu một thuộc tính trên cá thể, nếu nó không được định nghĩa trên cá thể, Javascript sẽ bắt đầu kiểm tra chuỗi nguyên mẫu để xem nó có được định nghĩa ở đó hay không.
Nếu bạn muốn truy cập nguyên mẫu của một phiên bản, hãy sử dụng Object.getPrototypeOf
.
Ngữ nghĩa của Javascript có thể gây nhầm lẫn. Tôi rất khuyên bạn nên làm việc thông qua việc đọc miễn phí Javascript Allongé như một cách để hiểu thấu đáo một số điểm tốt hơn của Javascript. Chương 8 tập trung vào chính xác chủ đề này.
'x.constructor.prototype == Foo.prototype' – dandavis
Thực tế' x' và 'Foo' không có cùng nguyên mẫu: nguyên mẫu của' Foo' là 'Function.prototype'. Bạn có câu trả lời hay, một số nghiên cứu về "chuỗi nguyên mẫu javascript" sẽ giúp bạn. – traktor53