2013-04-03 4 views
5

Diese kleine jQuery-Plugin:jquery/javascript: jQuery.fn.reverse = [] .reverse;

jQuery.fn.reverse = [].reverse; 

Wie funktioniert es? Wo ist das Objekt gebunden - Array-Prototyp, um die Funktion umzukehren? Ich verstehe nicht wirklich, wie es hinter der Szene funktioniert. Eine Erklärung wäre nett. Grüße

+1

Ursprünglich stammt von [hier] (http://www.mail-archive.com/[email protected]/msg04261.html) und wird vom Autor bezeichnet , Michael Geary, als "das kürzeste Plugin der Welt". Anscheinend können andere Array-Methoden auf die gleiche Weise angewendet werden: z. '.sort()', '.push()', '.pop()', '.unshift()' und '.shift()'. Vermutlich '.slice()' und '.splice()' auch. Ich bin nicht so sicher. '.join()' würde ein vernünftiges Ergebnis von einem jQuery-Objekt zurückgeben. –

Antwort

5

jQuery.fn ist ein Alias ​​für jQuery.prototype.

So fügt dieses Plugin die reverse Funktion von Array allen Objekten hinzu, die mit new JQuery() erstellt wurden. Dies ist der Fall für die Sammlungen, die mit $ erstellt wurden.

Und es funktioniert, weil die reverse Funktion specification es auf jedes Objekt anwenden, das eine Länge und indexierte Eigenschaften hat. Sie können es testen diese mit:

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

Dieses Verhalten ist [von Design] (http://es5.github.com/#x15.4.4.8) und wird sich nicht ändern. – georg

+0

@everybody: Danke für Erklärungen. Sieht so aus als hätte ich es verstanden. –

13

[].reverse ist die .reverse() Funktion von Array Prototyp. jQuery nutzt dies, anstatt eigene zu definieren.

[] erzeugt ein leeres Array und es ist durchaus möglich, die .reverse Funktion daraus zu verweisen.

So jetzt, in jQuery, kann man $.reverse() tun, wenn das jQuery-Objekt eine Sammlung von Elementen enthält.

+2

Genau. Und es funktioniert, weil jQuery die Struktur eines Arrays nachahmt. +1! – jwueller