Mid #prototype#class#inheritance#oop
Prototype và prototype chain là gì? class khác function constructor ra sao?
⚡ Trả lời nhanh
Mỗi object có liên kết nội bộ [[Prototype]] tới object khác; khi truy cập property không có sẵn, engine đi ngược chuỗi này đến null. `class` chỉ là cú pháp trên prototype, nhưng không hoisting như function, bắt buộc dùng `new` và chạy strict mode.
Ví dụ
main.js · sửa được
obj.__proto__(hoặcObject.getPrototypeOf) là prototype của instance;Fn.prototypelà object được gán làm prototype cho instance tạo bởinew Fn().- Gán property luôn tạo own property trên object (shadowing), không sửa prototype.
- Method đặt trên prototype được chia sẻ giữa mọi instance, tiết kiệm bộ nhớ.
class so với function constructor
class | function constructor | |
|---|---|---|
Gọi không có new | TypeError | chạy, this sai |
| Hoisting | TDZ như let | hoisted |
| Method | non-enumerable | enumerable nếu gán trực tiếp |
| Kế thừa | extends, super | thủ công qua Object.create |
| Private field | #x thật | không có |