2012-02-09 10 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 
}); 

$.test() gibi çağrı yapmak mümkün mü?

cevap

3

Kolayca jQuery nesnenin kendisini

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

uzatmak Ama bu fonksiyon jQuery.fn bulunmayabilir olacağını unutmayın (jQuery.prototype eşittir olan) ve bu nedenle, this aracılığıyla orada dom nodes erişemez olabilir diğer jQuery eklenti işlevlerinden önce veya sonra bu yöntemin zincirini yapamazsınız.

$().test() çalışmasının nedeni, jQuery yapıcı işlevinin jQuery.fn (prototip ..) öğesine bağlı yeni bir nesne oluşturmasıdır.

2

Bunun nedeni jQuery nesnesinin aslında yalnızca init yapıcısı olması. $'un anlamı, jQuery nesnesinin yapıcısını temsil eder. Böylece, $() yürütülüyor, boş bir jQuery nesnesi oluşturur, daha sonra test() prototip yöntemini çağırabilirsiniz.

Prototip'e erişmek için $.fn.test();