2012-03-18 24 views
9

Podczas czytania poniższego testu wydajności zauważyłem, że autor używał $(0) i $(1). Jaki jest tego cel?

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

Niezależnie od tego zachowania, jest ono nieudokumentowane. '$ (0) => []' i '$ (1) => [1]' (i '$ (2) => [2]'), ale nie mam pojęcia, dlaczego:/ – Matchu

+2

Czy przeczytałeś artykuł ten test łączy się z? –

+0

Dzięki @FelixKling, nie zauważyłem, że istnieje link! Najpierw czytałem [to] (https://docs.google.com/present/view?id=0Ac0YlG9vMA2LZHE1MnpycF8yMGZ6ZnZxa2hy&pli=1) =] – Ton

Odpowiedz

1

Jeśli spojrzeć na jQuery source code, można zobaczyć, że init nazywa kiedy $() jest wykonywany. Ta funkcja zawiera kilka instrukcji if do obsługi różnych informacji przekazanych jako selektor. Na zakończenie funkcji następuje nazywa się:

return jQuery.makeArray(selector, this); 

Jeżeli liczba takich jak 1 lub 2 jest przekazywana, wywołanie makeArray po prostu przekonwertować go do tablicy, takich jak [1], [2], itd. Tak więc nie jest niczym szczególnym w przypadku $(1).

+0

Jaki jest tego cel ...? Dlaczego nie '$ a = $()' lub '$ a = $ (true)' lub '$ a = [1]'? –

Powiązane problemy