Kế thừa
Các Javascript objects có một tập các đặc tính của bản thân và chúng cũng kế thừa một tập các đặc tính từ
prototype object của chúng. Để hiểu cái này, chúng ta phải xem xét truy cập đặc tính chi tiết hơn. Các ví dụ
trong phần này sử dụng hàm Object.create() để tạo các objects với các prototypes chỉ ra. Chúng ta sẽ thấy trong
các học phần sau, tuy nhiên, rằng mọi lần bạn tạo một thực thể của một class với new, bạn đang tạo một object
cái kế thừa các đặc tính từ một prototype object.
Giả sử bạn truy vấn đặc tính x trong object o. Nếu o không có một đặc tính bản thân với tên đó, prototype object
của o được truy vấn cho đặc tính x (Nhớ là, hầu hết tất cả objects có một prototype nhưng hầu hết không có một
đặc tính tên prototype. Kế thừa Javascript làm việc thậm chí nếu bạn không thể truy cập prototype object
trực tiếp. Nhưng xem trong các học phần sau nếu bạn muốn học làm cách nào làm cái đó). Nếu prototype object
không có đặc tính của bản thân theo tên đó, nhưng bản thân có một prototype, truy vấn được thực hiện trên
prototype của prototype. Cái này tiếp tục cho đến khi đặc tính x được tìm thấy hoặc cho đến khi một object với
một prototype null được tìm kiếm. Như bạn có thể thấy, thuộc tính prototype của một object tạo một móc xích
hay danh sách liến kết từ đó các đặc tính được kế thừa:
let o = {}; // o inherits object methods from Object.prototype
o.x = 1; // and it now has an own property x.
let p = Object.create(o); // p inherits properties from o and Object.prototype
p.y = 2; // and has an own property y.
let q = Object.create(p); // q inherits properties from p, o, and…
q.z = 3; // …Object.prototype and has an own property z.
let f = q.toString(); // toString is inherited from Object.prototype
q.x + q.y // => 3; x and y are inherited from o and p
Bây giờ giả sử bạn gán vào đặc tính x của object o. Nếu o đã có một đặc tính của bản thân nó (không do kế thừa)
tên x, thì phép gán đơn giản thay đổi giá trị của đặc tính đang tồn tại này. Mặt khác, phép gán tạo một đặc tính
mới tên x trên object o. Nếu o trước kia đã kế thừa đặc tính x, đặc tính kế thừa đó bây giờ được che giấu bởi
đặc tính của bản thân mới tạo với cùng tên.