2013-07-17 10 views
6

Nella pagina 109 del libro "Apprendimento modelli di progettazione JavaScript", c'è un esempio di codice che mi ha confuso.Cosa dice l'istruzione jquery "var collection = jQuery ([1]);" significare?

jQuery.single = (function(o){ 

    var collection = jQuery([1]); // <-- i want to ask this line 
    return function(element) { 

     // give collection the element 
     collection[0] = element; 

     // return the collection 
     return collection; 
    } 
})(); 

L'utilizzo della funzione è come questo:

$('div').on('click', function() { 
    var html = jQuery.single(this).next().html(); 
    console.log(html); 
}); 

Update: grazie per la risposta. Ho controllato il codice sorgente originale dalla pagina dell'autore 76 bytes for faster jQuery

var collection = jQuery([1]); // Fill with 1 item, to make sure length === 1 

ora ho capito. Vorrei che l'autore del libro "Learning JavaScript Design Patterns" potesse aggiungere anche questo commento, quando ha citato questo esempio di codice.

+0

Credo che stai passando un array '[1]' alla funzione! – NINCOMPOOP

+1

sarebbe più facile se pubblichi il relativo link – bipen

+4

Dai un'occhiata qui http://james.padolsey.com/javascript/76-bytes-for-faster-jquery/ –

risposta

6

jQuery([1]) sta semplicemente passando un array con una voce che contiene il numero intero 1 in jQuery, che restituirebbe un wrapper a quell'array contenente tutti i metodi prototipo jQuery

Successivamente assegna la variabile argomento element nello stesso array e quindi restituisce l'intera istanza di jQuery.

Da quanto sembra, l'intera funzione inietta semplicemente un singolo elementoin un oggetto jQueryriutilizzati e restituisce.

Si presume che acceleri le cose e lo faccia effettivamente quando conti milioni di iterazioni su un secondo, ma a mio avviso questo è un chiaro caso di micro-ottimizzazione che può morderti nel culo durante lunghe ore di debug. - Perfezione Uccisioni.

+0

E come può aiutare il parametro 'o' inutilizzato? –

1

Si sta passando un array predefinito alla funzione jQuery(). diamo [1] significa "nuovo array con 1 solo elemento"

potete anche scrivere le cose come -

var collection = jQuery(new Array(1)); // or even $(new Array(1)); 

Penso che il motivo che lo fanno, quindi non c'è alcuna confusione su quanti elementi sarà essere nella matrice.

+0

Solo una nota: 'new Array (1)' non è la stessa cosa di '[1]'. – David

Problemi correlati