© 2026 Laravel

JS Prototype: Bản chất của Kế thừa (Inheritance)

2 phút đọc
#javascript #oop #prototype #internals

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Bản chất

JS không có class thực sự như Java/PHP. Nó dùng Prototypal Inheritance. Mỗi object có một thuộc tính ẩn [[Prototype]] (hay __proto__) trỏ tới object khác. Nếu bạn tìm một property không thấy ở object hiện tại, JS sẽ tìm ngược lên __proto__ cho đến khi gặp null.

#2. Code mẫu

const animal = { eat: true };
const dog = Object.create(animal);
console.log(dog.eat); // true (lấy từ prototype)

#3. Quizz Senior

Q: Tại sao dùng class trong JS vẫn có thể bị coi là “sai”? A: Nếu bạn dùng class nhưng không hiểu bản chất Prototype, bạn sẽ lạm dụng kế thừa quá sâu (Deep Inheritance Tree). Hãy ưu tiên Composition (gộp object lại) thay vì kế thừa nhiều tầng.

Q: Sự khác biệt giữa __proto__prototype? A: __proto__ là property của một object (instance). prototype là property của một function (class), nó xác định __proto__ của object sẽ được tạo ra sau này.

Bài viết liên quan