</>
⌕
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ặc Object.getPrototypeOf) là prototype của instance; Fn.prototype là object được gán làm prototype cho instance tạo bởi new 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

classfunction constructor
Gọi không có newTypeErrorchạy, this sai
HoistingTDZ như lethoisted
Methodnon-enumerableenumerable nếu gán trực tiếp
Kế thừaextends, superthủ công qua Object.create
Private field#x thậtkhông có
🃏 Ôn bằng flashcard