Có khoảng một trăm vấn đề thuật ngữ ở đây, chủ yếu được xây dựng xung quanh ai đó (không phải bạn) đang cố gắng làm cho ý tưởng của họ nghe giống như The Best.
Tất cả các ngôn ngữ hướng đối tượng cần có khả năng xử lý một số khái niệm:
- đóng gói dữ liệu cùng với các hoạt động liên quan đến dữ liệu, được gọi là thành viên dữ liệu và chức năng thành viên, hoặc là dữ liệu và phương thức, trong số những thứ khác.
- kế thừa, khả năng nói rằng các đối tượng này giống như các đối tượng khác NGOẠI TRỪ cho những thay đổi này
- Tính đa hình ("nhiều hình dạng") trong đó một đối tượng tự quyết định phương thức nào sẽ được chạy, do đó bạn có thể phụ thuộc vào ngôn ngữ để định tuyến chính xác các yêu cầu của mình.
Bây giờ, khi so sánh:
Điều đầu tiên là toàn bộ câu hỏi "lớp" và "nguyên mẫu". Ý tưởng ban đầu bắt đầu ở Simula, trong đó với phương thức dựa trên lớp, mỗi lớp đại diện cho một tập hợp các đối tượng có chung không gian trạng thái (đọc "các giá trị có thể") và các hoạt động tương tự, từ đó tạo thành một lớp tương đương. Nếu bạn nhìn lại Smalltalk, vì bạn có thể mở một lớp và thêm các phương thức, điều này thực sự giống như những gì bạn có thể làm trong Javascript.
Các ngôn ngữ OO sau này muốn có thể sử dụng kiểm tra kiểu tĩnh, vì vậy chúng tôi có khái niệm về một lớp cố định được thiết lập tại thời gian biên dịch. Trong phiên bản lớp mở, bạn đã linh hoạt hơn; trong phiên bản mới hơn, bạn có khả năng kiểm tra một số loại chính xác tại trình biên dịch mà nếu không sẽ phải kiểm tra.
Trong ngôn ngữ "dựa trên lớp", việc sao chép đó xảy ra vào thời gian biên dịch. Trong ngôn ngữ nguyên mẫu, các hoạt động được lưu trữ trong cấu trúc dữ liệu nguyên mẫu, được sao chép và sửa đổi trong thời gian chạy. Mặc dù vậy, về mặt trừu tượng, một lớp vẫn là lớp tương đương của tất cả các đối tượng có chung không gian và phương thức trạng thái. Khi bạn thêm một phương thức vào nguyên mẫu, bạn thực sự tạo thành phần tử của lớp tương đương mới.
Bây giờ, tại sao làm điều đó? chủ yếu bởi vì nó làm cho một cơ chế đơn giản, hợp lý, thanh lịch trong thời gian chạy. Bây giờ, để tạo một đối tượng mới hoặc để tạo một lớp mới, bạn chỉ cần thực hiện một bản sao sâu, sao chép tất cả dữ liệu và cấu trúc dữ liệu nguyên mẫu. Bạn nhận được sự kế thừa và đa hình ít nhiều miễn phí sau đó: tra cứu phương thức luôn bao gồm yêu cầu một từ điển để thực hiện phương thức theo tên.
Lý do kết thúc trong tập lệnh Javascript / ECMA về cơ bản là khi chúng tôi bắt đầu với điều này 10 năm trước, chúng tôi đã làm việc với các máy tính ít mạnh hơn và các trình duyệt kém tinh vi hơn nhiều. Chọn phương thức dựa trên nguyên mẫu có nghĩa là trình thông dịch có thể rất đơn giản trong khi vẫn giữ được các thuộc tính mong muốn của hướng đối tượng.