Khi mã của bạn được viết, các đối tượng được tạo bằng cách sử dụng new Human()
sẽ có một thuộc tính được gọi là prototype
có giá trị là tham chiếu đến hàm Primate
. Đó rõ ràng không phải những gì bạn muốn (và nó không đặc biệt đặc biệt).
Một vài điều:
Bạn thường muốn thay đổi prototype
của một chức năng đó là dự định được sử dụng như một nhà xây dựng (với các nhà điều hành new
). Nói cách khác, bạn muốn đặt prototype
trên Human
(không phải trên ví dụ của Human
).
Giá trị bạn gán cho prototype
phải là một dụ loại mong muốn (hoặc, nếu không có công việc khởi tạo là cần thiết, kiểu như mong muốn của prototype
), không phải là một tài liệu tham khảo để xây dựng nó.
Không bao giờ cần phải chỉ định rõ ràng Object
(hoặc Object
trường hợp) cho hàm prototype
của hàm. Điều này là ngầm định.
Bạn có thể muốn một cái gì đó như thế này:
function Primate() {
this.hairy = true;
}
function Human() {}
Human.prototype = new Primate();
Human.prototype.constructor = Human;
var h = new Human();
Các Human
tham chiếu bởi h
có một tính chất gọi hairy
có giá trị là đúng.
Trong ví dụ trước, hairy
chỉ được gán giá trị của nó khi Primate
được gọi, đó là lý do tại sao Human.prototype
phải được gán một phiên bản Primate
. Điều này thay vào đó có thể được viết để không cần khởi tạo như vậy.
Ví dụ:
function Primate() {}
Primate.prototype.hairy = true;
function Human() {}
Human.prototype = Primate.prototype;
Human.prototype.constructor = Human;
var h = new Human();
Nguồn
2012-01-30 18:54:50
Bạn phải đọc để hiểu thừa kế trong js: http://javascript.crockford.com/inheritance.html và http://javascript.crockford.com/prototypal.html – bfavaretto
Bạn đang làm sai. Bạn muốn thao tác các đối tượng 'prototype' của các hàm tạo -' Primate' và 'Human'. Ví dụ mới được tạo ra (giá trị 'this' bên trong constructor) là * not * a function và do đó thêm thuộc tính' prototype' là vô nghĩa. –
Tôi sẽ tạo và mở rộng các đối tượng (với Object.create) thay vì khỉ vá chuỗi nguyên mẫu. Sử dụng các hàm như các hàm tạo có thể dẫn đến nhầm lẫn vì điều này đang thực hiện các đối tượng JavaScript như các cấu trúc giống lớp. – rxgx