Nhìn vào mã nguồn jQuery sẽ xóa mọi thứ lên. Bằng cách này, jQuery
và $
tham khảo cùng một đối tượng, và đây là cách đối tượng jQuery được định nghĩa:
var jQuery = function(selector, context) {
return new jQuery.fn.init(selector, context);
}
jQuery
là một chức năng và trong Javascript, một chức năng cũng là một đối tượng của loại Function
. Vì vậy, jQuery.f
hoặc $.f
gắn f
vào đối tượng jQuery Function
hoặc gọi đó là lớp jQuery nếu bạn muốn.
nếu bạn nhìn vào nguồn jQuery, bạn sẽ thấy rằng jQuery.prototype
đã được giao cho jQuery.fn
jQuery.fn = jQuery.prototype
Vì vậy, bất cứ khi nào bạn đính kèm một phương pháp (hoặc tài sản) để jQuery.fn
, như trong jQuery.fn.f = ..
, hoặc $.fn.f = ..
, hoặc jQuery.prototype.f = ..
hoặc $.prototype.f = ..
, phương thức đó sẽ có sẵn cho tất cả các phiên bản của lớp jQuery này (một lần nữa, không có lớp nào trong Javascript, nhưng nó có thể giúp hiểu).
Bất cứ khi nào bạn gọi jQuery()
chức năng, như trong jQuery("#someID")
, một trường hợp jQuery mới được tạo trên dòng này:
return new jQuery.fn.init(selector, context);
và trường hợp này có tất cả các phương pháp chúng tôi gắn liền với nguyên mẫu, nhưng không phải là phương pháp mà được gắn trực tiếp vào đối tượng Function
.
Bạn sẽ nhận được ngoại lệ nếu bạn thử gọi một hàm không được xác định ở đúng vị trí.
$.doNothing = function() {
// oh noez, i do nuttin
}
// does exactly as advertised, nothing
$.doNothing();
var jQueryEnhancedObjectOnSteroids = $("body");
// Uncaught TypeError: Object #<an Object> has no method 'doNothing'
jQueryEnhancedObjectOnSteroids.doNothing();
Oh, và cuối cùng để cắt một sợi dài ngắn và để trả lời câu hỏi của bạn - làm $.f = $.fn.f
phép bạn sử dụng các chức năng như một plugin hoặc một phương pháp hữu ích (trong jquery biệt ngữ).
Vì vậy, lợi ích của $ .f = $ .fn.f là gì? – qodeninja
ý của bạn là gì, lợi ích là gì? Họ phục vụ các mục đích khác nhau. Bạn có thể nói nơi bạn đã thấy các tác giả plugin sử dụng '$ .f = $ .fn.f'? –
SimpleModal thực hiện điều này http://www.ericmmartin.com/projects/simplemodal/ – qodeninja