2012-06-08 13 views
24

He estado viendo muchos ejemplos donde las personas usan la función .sort() en jQuery.¿Dónde está jQuery .sort() Documentation?

Así, por ejemplo:

$('#myId').sort(..); 

Por no puedo encontrar ninguna documentación para sort() en la API de jQuery, puede alguien me punto a ella?

Respuesta

22

Porque no es parte de jQuery (oficialmente), pero es un proxy Array.sort.

Como señala Derek, jQuery(...) no devuelve una matriz. Más bien, jQuery adds a proxy para hacer que el objeto "actuar como una matriz" jQuery:

// For internal use only. 
// Behaves like an Array's method, not like a jQuery method. 
push: push, 
sort: [].sort, // <-- here 
splice: [].splice 

Este proxy funciona porque el this en una función está determinada por el objeto en el que se invoca la función. Y, además, Array.sort (y Array.splice) funcionan en cualquier this que sea "tipo array" (tiene un length y presumiblemente propiedades 0..length-1). Aquí es un ejemplo de un objeto personalizado [ab] utilizando Array.sort:

var a = {0: "z", 1: "a", length: 2, sort: [].sort} 
a[0]  // -> "z" 
a.sort() // in-place modification, this === a 
a[0]  // -> "a" 
a instanceof Array // -> false (never was, never will be Array) 

YMMV siguiente los "sólo para uso interno" notas.

+0

'$ ('# myId')' no devuelve una matriz. –

+0

¿Eso significa que no necesito hacer un .toArray() debido a este proxy? – foreyez

+1

@foreyez: No. 'sort()' devolverá 'this',' push() 'la longitud y' splice() 'new' Array'. – Bergi