2012-03-18 17 views
9

Durante la lettura del seguente test delle prestazioni, ho notato che l'autore utilizzava $(0) e $(1). Qual è lo scopo di questo?

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

Qualunque sia questo comportamento, non è documentato. '$ (0) => []' e '$ (1) => [1]' (e '$ (2) => [2]'), ma non ho idea del perché:/ – Matchu

+2

Hai letto il articolo a cui questo test si collega? –

+0

Grazie a @FelixKling, non ho notato che c'è un link! Prima stavo leggendo [questo] (https://docs.google.com/present/view?id=0Ac0YlG9vMA2LZHE1MnpycF8yMGZ6ZnZxa2hy&pli=1) =] – Ton

risposta

1

Se si guarda al jQuery source code, si può vedere che init viene chiamato quando viene eseguito $(). Questa funzione contiene diverse istruzioni if per gestire varie informazioni passate come selettore. Alla fine della funzione seguente viene chiamata:

return jQuery.makeArray(selector, this); 

Se viene passato un numero come 1 o 2, la chiamata a makeArray sarà solo convertirlo in un array come [1], [2], ecc Quindi ci non è niente di particolarmente speciale su $(1).

+0

Quindi qual è lo scopo ...? Perché no '$ a = $()' o '$ a = $ (true)' o '$ a = [1]'? –

Problemi correlati