2012-03-18 12 views
9

Mientras leía la siguiente prueba de rendimiento, noté que el autor usó $(0) y $(1). ¿Cuál es el propósito de esto?

http://jsperf.com/scriptjunkie-premature-3

var $a = $(0); 

function fn_1() { 
var $a = $(this); 
if ($a.attr("rel") == "foo") { 
    $a.addClass("foo"); 
} 
else { 
    $a.addClass("other"); 
} 
} 

function fn_2() { 
$a.context = $a[0] = this; // fake the collection object 
if ($a.attr("rel") == "foo") { 
    $a.addClass("foo"); 
} 
else { 
    $a.addClass("other"); 
} 
} 
+0

Cualquiera que sea este comportamiento, no está documentado. '$ (0) => []' y '$ (1) => [1]' (y '$ (2) => [2]'), pero no tengo idea de por qué:/ – Matchu

+2

¿Has leído el ¿Este artículo está vinculado a esta prueba? –

+0

Gracias @FelixKling, ¡no noté que hay un enlace! Estaba leyendo por primera vez [esto] (https://docs.google.com/present/view?id=0Ac0YlG9vMA2LZHE1MnpycF8yMGZ6ZnZxa2hy&pli=1) =] – Ton

Respuesta

1

Si nos fijamos en la jQuery source code, se puede ver que init se llama cuando se ejecuta $(). Esta función contiene varias declaraciones if para manejar varias piezas de información pasadas como selector. Al final de la función se llama la siguiente:

return jQuery.makeArray(selector, this); 

Si se pasa un número como 1 o 2, la llamada a makeArray se acaba de convertirlo en una matriz como [1], [2], etc. Así que hay no es nada especial acerca de $(1).

+0

Entonces, ¿cuál es el propósito de ello ...? ¿Por qué no '$ a = $()' o '$ a = $ (verdadero)' o '$ a = [1]'? –

Cuestiones relacionadas