Tìm hiểu module pattern trong javascript.

Đối với Javascript, không phải ai cũng biết cách viết code hiểu quả và mang 1 số tính chất tiêu biểu của lập trình hướng đối tượng. Sau đây mình xin giới thiệu 1 phương pháp giúp giải quyết tính che giấu dữ liệu (Encapsulations) của OOP trong Javascript:

Create module pattern:
Tạo module pattern
(function () {
// code
})();
Với cách viết như trên thì Anonymous function này sẽ tự động gọi chính nó ngay lập tức. (Immediately-Invoked-Function-Expressions)

Naming module:
Sau khi tạo được module, ta cần gán cho module này 1 cái tên mới
var myModule = (function () {
// code
})();
Giờ đây ta đã có 1 module mới với tên là myModule.
Declare Propertis & Method
- Việc khai báo Methods trong Module cũng giống như khai báo hàm(Function) trong Javascript.
- Việc khai báo Properties trong Module cũng giống như khai báo biến(Variable) trong Javascript.

Nhìn vào đoạn code sau:
var myModule = (function () {
/* Properties */
// Private Properties
var _privateA;
var _privateB;

// Public Properties
var publicA;
var publicB;

/* Method */

/* Private Method */
// No parameter
var _privateMethodA = function() {
// Do something
};

// Twos parameters
var _privateMethodB = function(a, b) {
// Do something
};

/* Public Method */
// No parameter
var publicMethodA = function() {
// Do something
};

// One parameter
var publicMethodB = function(param) {
// Do something
};
})();
Nhận xét:
- Thực ra ở bước này mình chỉ muốn nói rõ về việc đặt tên và khai báo cho các Properties và Methods ở trong Module (Còn phần làm sao để public hay private sẽ hướng dẫn ở bước dưới: Return).
- Nếu Methods hoặc Properties muốn để private (không muốn bên ngoài module truy xuất vào) thì hãy đặt tên có dấu gạch dưới '_' ở phía trước để phân biệt với các Methods hoặc Properties public khác.

Return
var myModule = (function () {
/* Properties */
// Private Properties
var _privateA;
var _privateB;

// Public Properties
var publicA;
var publicB;

/* Method */

/* Private Method */
// No parameter
var _privateMethodA = function() {
// Do something
};

// Twos parameters
var _privateMethodB = function(a, b) {
// Do something
};

/* Public Method */
// No parameter
var publicMethodA = function() {
// Do something
};

// One parameter
var publicMethodB = function(param) {
// Do something
};

/* Return */
return {
publicA: publicA,
publicB: publicB,
publicMethodA : publicMethodA,
publicMethodB : publicMethodB
};
})();
Nhận xét: Ở đây việc return thực chất là return ra 1 Object trong Javascript. Và các thuộc tính của Object được return này chính là những Public Methods & Properties (Như trong ví dụ trên). Những Private Methods & Properties trong myModule sẽ không được return.
Ở bên ngoài Module muốn truy xuất vào các Properties hay Methods thì sẽ gọi giống với cách gọi của class trong các ngôn ngữ lập trình.
Ví dụ:
myModule.publicA
myModule.publicB
myModule.publicMethodA()
myModule.publicMethodB(param)
Để cho dễ hiểu đối với người mới bắt đầu thì có thể hiểu myModule là 1 class. Như vậy việc gọi và sử dụng các Methods hay Properties sẽ dễ hiểu hơn.
*Lưu ý: Trong phương pháp này module được tạo ra sẽ tương đương với class Singleton.

Không có nhận xét nào :

Đăng nhận xét