$ là cách thay thế, viết gọn hơn cho jQuery, nên $() và jQuery() là như nhau.
$.fn là 1 object chứa tất cả function liên quan đến jQuery.
Tuy nhiên init không phải là property của $.fn, Để hiểu hơn khi truy xuất 1 property của 1 object, JS engine sẽ gọi đến built-in [[GET]] với các tham số và object và tên property cần truy xuất, $.fn.init tương đương cách gọi [[GET]]($.fn, 'init').
Phần hiện thực của [[GET]]($.fn, 'init') kiểm tra như sau:
-
init có phải là 1 property của $.fn không, kết quả không có init (như mình nói ở trên).
- Lên 1 bậc prototype chain, kiểm tra
init có phải là property của $.fn.__proto__ hay không? $.fn.__proto__ và jQuery.prototype cùng trỏ tới 1 object chung. Trong jQuery.prototype có property tên là init. Kết quả trả về giá trị của property init là function object (callable object).
Lời gọi hàm $() sẽ gọi tới $.fn.init().
Do đó, các functions như $(), $.fn.init(), jQuery(), jQuery.prototype.init() đều thực hiện như nhau.