01/10/2018, 17:20

Dùng closures thiết lập tính private cho functions khi viết plugin trong JQuery như thế nào?

1. Vấn đề Giả sử bạn đang viết một plugin. Plugin của bạn có nhiều functions bổ trợ cho plugin của bạn. Tuy nhiên, bạn chỉ muốn sử dụng plugin đó cho cho plugin của bạn, không muốn những hàm này được gọi từ bên ngoài. Cách viết như sau sẽ rơi vào trường hợp đó: function ...

1. Vấn đề
Giả sử bạn đang viết một plugin. Plugin của bạn có nhiều functions bổ trợ cho plugin của bạn. Tuy nhiên, bạn chỉ muốn sử dụng plugin đó cho cho plugin của bạn, không muốn những hàm này được gọi từ bên ngoài. Cách viết như sau sẽ rơi vào trường hợp đó:

function _debug(msg)
{
	alert (msg);
}
jQuery.fn.bgcolor = function(){
        return this.each(function(){
		$(this).css("background-color", "red");
                _debug('Gọi hàm debug');
	});
};

2. Cải tiến
Với cách viết như trên, hàm _debug có thể “bị” sử dụng ở bất cứ đâu. Giả sử bạn chỉ muốn hàm _debug sử dụng trong plugin thôi, không sử dụng ở bất cứ đâu khác. Lúc đó, bạn dùng closures để cải tiến lên một chút.

(function($) {
     function _debug(msg)
     {
	     alert (msg);
     }
     jQuery.fn.bgcolor = function(){
             return this.each(function(){
		     $(this).css("background-color", "red");
                     _debug('Gọi hàm debug');
	     });
     };
})(jQuery)

3. Lợi ích của việc sử dụng closures
– Giúp thiết lập tính prive cho những functions
– Giúp chúng ta tránh được conflict với những bộ thư viện JavaScript khác bởi vì chúng ta có thể sử dụng alias JQuery thay cho alias dấu $ với sự hỗ trợ của hàm noConflict()
– Ngoài việc chúng ta có thể sử dụng alias JQuery, chúng ta có thể sử dụng alias dấu $ như bình thường


0