2012-02-09 32 views
5
(function ($) { 
    $.fn.test = function() { 
     console.log('works'); 
    }; 
})(jQuery); 

$(document).ready(function() { 
    var var1 = $().test(); // works 
    var var1 = $.test(); // error: $.test is not a function 
}); 

Có thể gọi như thế này $.test()?

Trả lời

3

Bạn có thể dễ dàng mở rộng đối tượng jQuery tự

(function ($) { 
    $.test = function() { 
     console.log('works'); 
    }; 
})(jQuery); 

Nhưng lưu ý rằng chức năng này sẽ không có sẵn trong jQuery.fn (mà bằng jQuery.prototype) và do đó, bạn không thể truy cập dom nodes trong đó qua this, bạn không thể chuỗi phương thức đó sau hoặc trước các chức năng plugin jQuery khác.

Lý do tại sao $().test() hoạt động là, hàm tạo hàm jQuery tạo đối tượng mới được liên kết với jQuery.fn (nguyên mẫu ..).

2

Tôi nghĩ rằng điều này là do đối tượng jQuery thực ra chỉ là hàm tạo init. Có nghĩa là $ chỉ đại diện cho hàm tạo của một đối tượng jQuery. Do đó, việc thực hiện $() sẽ tạo một đối tượng jQuery trống, sau đó bạn có thể gọi phương thức nguyên mẫu test() từ đó.

Để truy cập nguyên mẫu, bạn có thể làm $.fn.test();

Các vấn đề liên quan