EDIT: Sau khi đọc lại tôi không nghĩ rằng điều này trả lời câu hỏi của bạn, nhưng nó có thể hữu ích cho sự hiểu biết tốt hơn của một ai đó về cách jQuery hoạt động anyway vì vậy tôi rời khỏi nó.
gì đang xảy ra là jQuery()
đang được định nghĩa là jQuery.fn.init()
đó là một cách khác để nói jQuery.prototype.init()
đó là chức năng chọn! Điều này có nghĩa là không ai gọi số jQuery.fn.init()
hoặc jQuery.init()
vì jQuery()
IS .init()
!
Cái gì?
Hãy nhìn vào đoạn mã bạn đang nói về:
// Define a local copy of jQuery
var jQuery = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
},
Trong những ý kiến nó nói chỉ là những gì tôi đã nói, nhưng một thời gian ngắn hơn. Nhưng đây chỉ là bản sao cục bộ của jQuery ... tuy nhiên, nếu bạn đi đến dòng 908 (của phiên bản 1.4.4) ở cuối chức năng tự thực hiện, bạn sẽ thấy:
// Expose jQuery to the global object
return (window.jQuery = window.$ = jQuery);
})();
.. có nghĩa là địa phương này jQuery
trở thành toàn cầu jQuery
. Vì thế? Vì vậy ... địa phương này jQuery
thực sự là jQuery.fn.init()
phải không? Vì vậy, init()
là gì? Nếu bạn nhìn từ dòng 100 đến 208 bạn sẽ thấy rằng đó là phương pháp chọn. Phương pháp chọn là gì? Đó là phương pháp bạn sử dụng mọi lúc để tìm các thẻ, id, các lớp ... $('#id')
, jQuery('.class')
, $('ul li a')
... chức năng chọn!
Vì vậy, không ai có thể gọi jQuery.init('div')
vì đây là phiên bản tiết kiệm của jQuery('div')
sau lần gán đó. Và hãy nhớ rằng jQuery.fn
chính xác giống như khi nói jQuery.prototype
vì vậy thực sự tất cả những gì một phần đang làm là gán .init()
làm phương thức của nguyên mẫu của đối tượng jQuery
. I E. một plugin jQuery.
Phew, đó là một ngụm. Tôi hy vọng điều này có ý nghĩa và nếu có ai sửa đổi trong trường hợp tôi hiểu sai trong bất kỳ phần nào của lời giải thích dài dòng này, vui lòng cho tôi biết.
+1 cho nỗ lực tuyệt đối. Vì vậy, có bất kỳ lý do cụ thể để sử dụng nguyên mẫu như ** đối lập ** để chỉ trên đối tượng jQuery chính nó. Là nó nhanh hơn hoặc một cái gì đó như thế (tôi không thể tưởng tượng rằng nó là) –
Tôi không có một câu trả lời tốt cho câu hỏi đó, xin lỗi. Tôi có thể hack một câu trả lời, nhưng chắc chắn về điều này là trên mức lương của tôi. – mVChr
ditto +1. không bao giờ thực sự hiểu những gì mà bit đầu tiên cho jquery đã làm. cảm ơn, mvchr! – hellatan