Hướng dẫn dùng defineproperty JavaScript
Vì bạn đã hỏi một câu hỏi tương tự , chúng ta hãy thực hiện từng bước một. Nó dài hơn một chút, nhưng nó có thể giúp bạn tiết kiệm nhiều thời gian hơn tôi đã viết cho việc này: Thuộc tính là một tính năng OOP được thiết kế để phân tách sạch mã khách hàng. Ví dụ: trong một số cửa hàng điện tử, bạn có thể có các đối tượng như thế này:
Sau đó, trong mã khách hàng của bạn (cửa hàng điện tử), bạn có thể thêm giảm giá cho các sản phẩm của mình:
Sau đó, chủ cửa hàng điện tử có thể nhận ra rằng mức giảm giá không thể lớn hơn 80%. Bây giờ bạn cần tìm MỌI sự xuất hiện của sửa đổi giảm giá trong mã máy khách và thêm một dòng
Sau đó, chủ cửa hàng điện tử có thể thay đổi thêm chiến lược của mình, như "nếu khách hàng là người bán lại, mức chiết khấu tối đa có thể là 90%" . Và bạn cần thực hiện thay đổi trên nhiều nơi một lần nữa cộng với bạn cần nhớ thay đổi các dòng này bất cứ khi nào chiến lược được thay đổi. Đây là một thiết kế xấu. Đó là lý do tại sao đóng gói là nguyên tắc cơ bản của OOP. Nếu nhà xây dựng là như thế này:
Sau đó, bạn chỉ có thể thay đổi các phương thức
Lưu ý cuối cùng nhưng một dòng: trách nhiệm đối với giá trị chiết khấu chính xác đã được chuyển từ mã khách hàng (định nghĩa cửa hàng điện tử) sang định nghĩa sản phẩm. Sản phẩm có trách nhiệm giữ cho các thành viên dữ liệu của nó nhất quán. Thiết kế tốt là (đại khái) nếu mã hoạt động giống như suy nghĩ của chúng tôi. Rất nhiều về tài sản. Nhưng javascript khác với các ngôn ngữ hướng đối tượng thuần túy như C # và mã hóa các tính năng khác nhau: Trong C # , chuyển đổi các trường thành thuộc tính là một thay đổi đột phá , vì vậy các trường công khai nên được mã hóa thành Thuộc tính được triển khai tự động nếu mã của bạn có thể được sử dụng trong máy khách được biên dịch riêng biệt. Trong Javascript , các thuộc tính tiêu chuẩn (thành viên dữ liệu với getter và setter được mô tả ở trên) được xác định bởi bộ mô tả truy cập (trong liên kết bạn có trong câu hỏi của mình). Độc quyền, bạn có thể sử dụng bộ mô tả dữ liệu (vì vậy bạn không thể sử dụng giá trị tức là và đặt trên cùng một thuộc tính):
Cả hai mô tả có thể có các thành viên này:
* trừ khi ở chế độ nghiêm ngặt - trong trường hợp đó, JS dừng thực thi với TypeError trừ khi nó bị bắt trong khối thử bắt Để
đọc các cài đặt này, sử dụng Tìm hiểu bằng ví dụ:
Nếu bạn không muốn cho phép mã máy khách lừa đảo như vậy, bạn có thể hạn chế đối tượng theo ba cấp độ giam cầm:
Bạn không cần bận tâm đến điều này nếu bạn chỉ viết một vài dòng vui vẻ. Nhưng nếu bạn muốn viết mã một trò chơi (như bạn đã đề cập trong câu hỏi được liên kết), bạn nên thực sự quan tâm đến thiết kế tốt. Hãy thử google một cái gì đó về antipotype và mùi mã . Nó sẽ giúp bạn tránh các tình huống như "Ồ, tôi cần phải viết lại hoàn toàn mã của mình một lần nữa!" , nó có thể giúp bạn tiết kiệm hàng tháng tuyệt vọng nếu bạn muốn viết mã nhiều. Chúc may mắn. 445 hữu ích 1 bình luận chia sẻ |