2011-09-24 24 views
15

Rozumiem koncepcję rozszerzenia jquery.fn w ​​celu umieszczenia niestandardowych funkcji w łańcuchu prototypów obiektu jquery, ale w moim przypadku niektóre z moich narzędzi nie muszą być dołączone do selektora . Po prostu szukam metody statycznej. Tak więc chciałem wiedzieć o wszelkich pułapkach pisania metod statycznych bezpośrednio na obiekcie jquery jako metodach użycia.Pisanie jQuery statycznych metod util

Przykład:

jquery.myMethod = function(arg){ 
    ...... 
} 

$.myMethod("blabla"); 

Dzięki

Odpowiedz

15

Wydaje się, że dobrze jest nie zrzucać wszystkich funkcji użytkowych do globalnej przestrzeni nazw. Im mniej możesz wpływać na globalną przestrzeń nazw, tym lepiej. Jeśli masz już jQuery, a następnie do wyboru dla gdzie je umieścić to:

  1. jako nowe metody na obiekcie jQuery jako: jQuery.myUtil1(), jQuery.myUtil2().
  2. Jako nowe metody pod jednym obiektem w obiekcie jQuery jako: jQuery.jfUtils.myUtil1(), jQuery.jfUtils.myUtil2().
  3. Jako nowe metody na jednym nowym obiekcie globalnym (nie ma nic wspólnego z jQuery) jako: jfUtils.myUtil1(), jfUtils.myUtil2().

Opcja 2) wydaje mi się lepsza niż opcja 1), ponieważ zmniejszasz ryzyko kolizji z innymi funkcjami jQuery, ale dodajesz dodatkowe wyszukiwanie dla każdego wywołania funkcji.

Opcja 3) wydaje mi się zupełnie do zaakceptowania, ponieważ dodaje tylko jeden nowy element do globalnej przestrzeni nazw, tak długo jak nazwa jest w miarę unikalna, powinieneś być w porządku.

Sądzę, że możesz wybrać jedną z opcji 2) lub opcję 3). Opcja 2) może być trochę bezpieczniejsza, ponieważ znasz ogólny zakres tego, co jest w tym obszarze nazw, ale każdy z nich może działać.

+0

Dzięki jfriend00 tak naprawdę jest to kwestia preferencji przez dźwięki, a także bezpośrednie dodanie go do obiektu jquery, który naprawdę musi być bardziej ostrożny. Właśnie dlatego najpierw sprawdziłem plik jquery.js, aby upewnić się, że nie ma metod o tej samej nazwie, które chciałbym dodać. Po prostu wydaje się czystsze, aby dodać je bezpośrednio do nazwy pliku jquery. Ale widzę także dodatkową ochronę dodawania innego obiektu bezpośrednio do przestrzeni nazw jquery, aby dodać swoje metody. – Chapsterj

+0

+1 Zdecydowanie idź z opcją 2. Naprawdę nie jest tak źle napisać jako $ .util.myMethod(), a ochrona uratuje ci bóle głowy w dół. Grupowanie wspólnych funkcji w przestrzeni nazw jest dobrą praktyką w dowolnym języku. Wyjątkiem jest, chyba że zdecydujesz się powiązać z łańcuchem manipulacji DOM jQuery. –

5

nie należy dodać metody statyczne do jQuery. Nic nie zyskujesz, próbując. Punkt rozszerzenia jQuery jest taki, że obiekty jQuery znalezione przy ciągach zapytań będą miały na nich metody. Po prostu tworzysz globalną funkcję, więc po prostu stwórz nowy obiekt najwyższego poziomu, aby trzymać swoje funkcje.

+4

Twoje oświadczenie nie jest do końca prawdą. Wstawianie metod do obiektu jQuery nie powoduje żadnych nowych konfliktów globalnej przestrzeni nazw i globalnych przestrzeni nazw i jako takie może być lepsze niż wyrzucenie całej gamy nowych funkcji do globalnej przestrzeni nazw. Musisz się upewnić, że nie kolidujesz z innymi funkcjami jQuery, ale nie ryzykujesz kolizji z niczym innym na poziomie globalnym. – jfriend00

+2

Nie widzę, jak jeden jest lepszy od drugiego: albo dodasz nazwę do globalnego obszaru nazw i mam nadzieję, że nie kolidujesz z czymś tam, lub dodasz nową nazwę do obiektu jQuery i mam nadzieję, że nie nie zderzają się z czymś tam. Jest to ten sam problem w każdym przypadku, ale przynajmniej przez dodanie nazwy do globalnej przestrzeni nazw, w której masz swoją nazwę, i nie mylić problemu, sprawiając, że wygląda jak coś, co zapewnia jQuery. –

+0

Jak widać w mojej odpowiedzi, wskazałem na plusy i minusy każdego z nich. Prawdopodobnie zależy to od tego, która przestrzeń nazw, którą uważasz, jest lepiej zrozumiana i mniej prawdopodobna jest konflikt - przestrzeń nazw obiektu jQuery lub globalna przestrzeń nazw - żadna pojedyncza poprawna odpowiedź. Oba mogą działać. W moim komentarzu wskazałem, że można rozważyć dodanie funkcji jQuery do obiektu jQuery, nawet jeśli nie są to metody obiektów jQuery. Są inne powody, aby to zrobić. – jfriend00

Powiązane problemy