2013-04-03 12 views
5

Ten mały jQuery plugin:jquery/javascript: jQuery.fn.reverse = [] .reverse;

jQuery.fn.reverse = [].reverse; 

Jak to działa? Gdzie jest obiekt wiążący - Prototyp tablicy do odwrócenia funkcji? Nie bardzo rozumiem, jak to działa za sceną. Niektóre wyjaśnienia byłyby miłe. Pozdrowienia

+1

pierwotnie pochodzi z [tutaj] (http://www.mail-archive.com/[email protected]/msg04261.html) i jest określany przez autora , Michael Geary, jako "najkrótsza na świecie wtyczka". Podobno inne metody Array mogą być stosowane w ten sam sposób: np. '.sort()', '.push()', '.pop()', '.unshift()' oraz '.shift()'. Przypuszczalnie również '.slice()' i '.splice()'. Nie jestem pewien, czy '.join()' zwróci rozsądny wynik z obiektu jQuery. –

Odpowiedz

5

jQuery.fn to pseudonim dla jQuery.prototype.

Ta wtyczka dodaje funkcję Array's reverse do wszystkich obiektów utworzonych przy użyciu new JQuery(), co ma miejsce w przypadku kolekcji zbudowanych przy użyciu $.

Działa to, ponieważ funkcja specification powoduje, że ma ona zastosowanie do dowolnego obiektu, który ma długość i właściwości indeksowane. Można przetestować go przy tym:

var a = {0:'a', 1:'b'}; 
a.length = 2; 
console.log([].reverse.call(a)); // it works 
+0

To zachowanie jest [według projektu] (http://es5.github.com/#x15.4.4.8) i nie będzie się zmieniać. – georg

+0

@ wszyscy: Dziękuję za wyjaśnienia. Wygląda na to, że to zrozumiałem. –

13

[].reverse to funkcja .reverse() z Array Prototyp. jQuery używa tego zamiast definiować własne.

[] tworzy pustą Array i jest całkowicie poprawny, aby odwoływać się do funkcji .reverse.

Teraz, w jQuery, można wykonać $.reverse(), jeśli obiekt jQuery zawiera kolekcję elementów.

+2

Dokładnie. I działa, ponieważ jQuery naśladuje strukturę tablicy. +1! – jwueller