Hướng dẫn private static javascript - javascript tĩnh riêng tư
ES6 đã giới thiệu cho chúng ta về Class trong Javascript, nhưng nó vẫn quá là đơn giản để có thể sử dụng cho các ứng dụng phức tạp. Trường của Class (hay còn được gọi là thuộc tính của Class) có mục đích đem đến các constructor đơn giản hơn với các thuộc tính private và static. Show Hãy cùng điểm lại về Class trong ES6 trước khi xem qua các ví dụ chi tiết hơn. Những điều cơ bản về Class trong ES6Mô hình kế thừa kiểu Prototype có vẻ sẽ gây khó hiểu đối với các lập trình viên đã quen hay hiểu biết nhiều về kế thừa kiểu Class được sử dụng trong các ngôn ngữ như C++, C#, Java hay PHP. Class trong JavaScript tuy chủ yếu đơn thuần là những cú pháp được thiết kế giúp cho mọi thứ dễ hơn, và nó đồng thời giúp cho những người vốn đã quen với khái niệm lập trình hướng đối tượng trở nên quen thuộc hơn.C++, C#, Java hay PHP. Class trong JavaScript tuy chủ yếu đơn thuần là những cú pháp được thiết kế giúp cho mọi thứ dễ hơn, và nó đồng thời giúp cho những người vốn đã quen với khái niệm lập trình hướng đối tượng trở nên quen thuộc hơn. Class là một template giúp định nghĩa cách hoạt động của các object thuộc class đó. Class 6 sau định nghĩa cho các loài động vật nói chung (tên các class thường được viết hoa chữ cái đầu tiên để giúp phân biệt chúng với các object và các type khác):
Việc khai báo class được thực hiện ở strict mode nên ta không cần thiết phải thêm 7.strict mode nên ta không cần thiết phải thêm 7.Hàm 8 sẽ chạy khi một object thuộc loại này được tạo và nó có nhiệm vụ định nghĩa các thuộc tính ban đầu cho object đó. 9 và 0 là các phương thức giúp thêm các chức năng khác cho object.Và giờ object của ta đã có thể được tạo từ Class này thông qua từ khóa 1:
Getter and SetterCác 2 là các phương thức đặc biệt chỉ được dùng để định nghĩa các giá trị cho object. Tương tự, 3 là các phương thức đặc biệt chỉ được dùng để trả về các giá trị. Ví dụ:
Child/Sub-classViệc sử dụng một Class được xây dựng trên một Class khác có lẽ là điều thường thấy khi lập trình hướng đối tượng. Nếu ta hầu như chỉ tạo các object về 4, thì việc sử dụng Class 6 sẽ quá tổng quát, và lúc nào ta cũng sẽ phải định nghĩa đi định nghĩa lại việc nó có 4 chân (legs) và kêu "woof" (noise) làm mặc định.Class 6 có thể kế thừa tất cả các thuộc tính và phương thức từ class 6 sử dụng từ khóa 8. Tất cả những thuộc tính và phương thức cụ thể cho class 6 có thể được thêm hoặc bớt nếu cần:
0 đại diện cho parent class() và thường được gọi trong hàm 8. Ở ví dụ trên, phương thức 9 của class 6 đã override phương thức tương ứng được định nghĩa ở class 6.Giờ ta có thể tạo ra một object instance của class 6:
Phương thức Static và Thuộc tínhĐịnh nghĩa một phương thức với từ khóa 6 sẽ giúp cho phương thức của class đó có thể được gọi mà không cần phải khởi tạo một object instance. JavaScript không hỗ trợ các thuộc tính static giống như các ngôn ngữ lập trình khác, nhưng việc thêm các thuộc tính vào khi định nghĩa class (một class cũng đồng thời là một JavaScript object) là điều có thể.Class 6 có thể được điều chỉnh lưu trữ được số lần mà các object được tạo từ nó:
Hàm static getter 8 của class sẽ trả về số lần mà object dog được tạo:
Các trường được mong chờ trong các chuẩn ES tiếp theoMột trong các đề xuất về trường của class đó là cho phép chúng được khởi tạo ở ngay đầu Class:
Điều này cũng tương tự với việc:
Trường Static của ClassCác trường trong class cho phép thuộc tính static được khai báo ngay bên trong 9. Ví dụ:
Và tương tự trong ES6 ta đã có một cách không gọn ghẽ cho lắm: 0Trường Private của classTất cả các thuộc tính trong class của ES6 đều mặc định là public và có thể được xem, chỉnh sửa từ bên ngoài class. Trong ví dụ về class 6 trên, không có gì có thể ngăn cản việc thuộc tính 1 có thể sẽ bị thay đổi mà không cần thông qua hàm setter 2: 1Các ngôn ngữ khác cho phép khai báo thuộc tính 3. Nhưng đó là điều không thể trong ES6, mặc dù các lập trình viên có thể tạm thời giải quyết vấn đề này bằng cách sử dụng underscore convention ( 4).Trong các chuẩn ES tiếp theo, các trường private của class có thể được định nghĩa sử dụng dấu thăng 5 làm prefix: 2Hãy chú ý rằng không có cách nào để định nghĩa các phương thức, hàm getter settter private, mặc dù đang có những đề xuất sử dụng dấu thăng 5 làm tiền tố cho tên. Ví dụ: 3Lợi ích: Code React trông gọn gàng hơnCác component React thường có những phương thức gắn với các sự kiện DOM. Để đảm bảo ngữ cảnh 7 hoạt động đúng cho component hiện tại, việc phải 8 tất cả các phương thức tương ứng là cần thiết. VÍ dụ: 4Nếu 9 được định nghĩa là trường của class, nó có thể được set cho một hàm bằng cách dùng chuẩn arrow 0 từ ES6, điều này sẽ giúp nó được bind một cách tự động vào object được định nghĩa. 1 cũng có thể được khai báo như một trường của Class nên ta không cần phải có constructor: 5References
|