2009-10-19 11 views
5

Dzisiaj, moje jedyne palące pytanie dotyczące jQuery dotyczy czasu użycia jQuery.extend() i jQuery.fn (który jest używany do wtyczek). Basil Goldman wydaje się mieć wyjaśnienie w "Defining your own functions in jQuery", ale z jakiegoś powodu nadal nie jestem zadowolony, że mam najlepsze informacje. Kiedy zaczniemy pracować z jQuery.fn, musimy rozważyć, czy powinniśmy po prostu zbudować pełnowymiarową wtyczkę. Oznacza to trzy problemy: rozszerzenie, dodanie nowej funkcji i zbudowanie wtyczki. Powinno być wyjaśnienie, że spójne są wszystkie trzy. Czy to jest warte wyjaśnienia i czy je mamy?jQuery: rozszerzenie, dodanie nowej funkcji i budowa wtyczki?

Odpowiedz

7

Myślę, że możesz myśleć zbyt mocno. :)

W źródle jQuery - przedłużenie() określa się raz i stosuje się w obu nazw:

jQuery.extend = jQuery.fn.extend = function() { .. }; 

technicznie wszystkie funkcja ta jest połączyć razem właściwości obiektów.

Więc w najbardziej podstawowego przypadku użycia, wystarczy połączyć dwa obiekty w jeden obiekt (podobnie jak parametry w opcjach wtyczki):

this.options = $.extend({}, defaultOptions, userOptions); // Just mergin' objects 

funkcji rozszerzania na zwykły Jane nazw jQuery $ || jedynie dodaje tę funkcję jako funkcję statyczną w przestrzeni nazw jQuery. Funkcje występujące w przestrzeni nazw jQuery są zwykle funkcjami, które nie wymagają elementu do działania. Są to funkcje takie jak isArray() i isFunction() wraz z wieloma innymi.

var noWhiteSpace = $.trim(string); // No element needed 

jQuery.fn jest mniej lub bardziej zarezerwowany dla funkcji wykonujących akcje oparte na elementach przekazywanych do obiektu jQuery. Są to normalne wtyczki i większość rzeczy, do których przywykłeś w jQuery.

$('div').css('border', '1px solid green'); // Do work on a set of elements 

Co ciekawiej, jeśli spojrzysz na coś podobnego do funkcji $ .data() w źródle jQuery. Jest zdefiniowany w obu obszarach nazw. Najpierw jest zdefiniowany w $ namespace, a element i jako pierwszy parametr. Zostaje później rozszerzony na $ .fn i po prostu wywołuje pierwszą funkcję z pierwszym zestawem parametrów jako "this".

Mam nadzieję, że tego właśnie szukasz!

+0

Doceniam twoją odpowiedź! Mam starszą wersję kodu od YUI 2.x do (być może) przeniesienia do jQuery, więc muszę myśleć "twardo"; [ Teraz potrzeba zbudowania wtyczki może nadejść, gdy masz kilka "prywatnych" pomocy funkcje dla "publicznej" funkcji rozszerzającej --- prawda? – rasx

+0

To byłby powód do używania wtyczki, tak! –

Powiązane problemy