(function($){ $.fn.print = function(props) { var functions = $.fn.print.functions; if ($.isArray(props)) { functions = $.merge(functions, props); } return this.each(function() { var element = $(this); functions.forEach(function(fn){ console.log(fn, ': ', $(element)[fn]()); }); }); }; $.fn.print.functions= ['height', 'width']; })(jQuery);
Trick z immediate function to zabezpieczenie na wypadek, gdyby aplikacja używała $ (który jest aliasem dla obiektu jQuery) do innych celów. Pisząc plugin rozszerza się obiekt fn, który jest referencją na prototype obiektu jQuery. Korzystając z faktu, że każda funkcja jest obiektem, możemy załączyć do niej obiekt, który może zostać wykorzystany, jako domyślne ustawienia pluginu.
Plugin wywołujemy na dowolnym selektorze, na przykład:
$(function(){ $('div').print(); $('a').print(['size']); $('button').print(['html']); });
Drugi sposób na uzyskanie podobnego efektu, to funkcja extend z jQuery, którą wykorzysujemy do łączenia dwóch obiektów JavaScript w jeden. Wywołanie tej funkcji na $.fn spowoduje rozszerzenie jQuery o naszą funkcję.
(function($){ $.fn.extend({ count: function(){ console.log(this.length); } }); })(jQuery); $(function(){ $('div').count(); });