2012-07-09 6 views
5

per esempio,Il valore di ritorno di jQuery è Array, ma il costruttore è Object. Come?

$(document) // [ #document ] : document object in array 
typeof $(document) // "object" 
$(document).constructor // function Object() { [native code] } or function (a,b) { return some function; } 

Se il valore è di matrice, esso deve essere di costruzione Array.

Non è un oggetto come un array. perché l'array come oggetto ha solo proprietà array, non come [].

Come può essere?

aggiungi: Se è possibile, mostra un codice di esempio semplice, per favore. come

a = ... 
console.log(a) // [ ... ] 
console.log(a.constructor) // function Object or something 
+0

Non capisco il tuo ragionamento per cui il ritorno da '$ (document)' è "non un array come oggetto" - se guardi la sorgente jQuery effettiva lo troverai _is_ un array-like oggetto e _not_ un array ... – nnnnnn

+0

@nnnnnnn perché l'oggetto simile all'array non è mostrato come [] – Ephemera

+0

"Mostrato" dove? Il ritorno da '$ (document)' è un'istanza di 'jQuery.fn.init' che ha aggiunto le proprietà' 0' e 'length'. Se fosse un 'array', avrebbe metodi array come '.join()' e non lo è. _Guarda il codice sorgente._ – nnnnnn

risposta

3

Date un'occhiata a il jQuery source. $(document) crea un oggetto jQuery clonato dell'elemento del documento e quindi crea e restituisce un array-like object.

jQuery funzione fabbrica $() restituisce un oggetto jQuery che ha molti delle proprietà di un array (lunghezza, il [] accesso agli array, ecc), ma non è esattamente lo stesso come un array e manca di alcuni dei metodi built-in dell'array (come .pop() e .reverse()).

+0

Ora sono confuso. Se restituisce una matrice di oggetti, il suo costruttore non dovrebbe dare 'function Array() {// ..}'? – boring

+1

Non crea o restituisce una matrice, restituisce un'istanza di 'jQuery.fn.init' dopo aver aggiunto le proprietà' 0' e 'length'. Cioè, restituisce un oggetto tipo array. – nnnnnn

+0

Risposta chiarita. – RobB

0

Un array, come in [], è anche un oggetto in JavaScript. In JS quasi tutto è un oggetto, come ad esempio le funzioni, array, oggetti letterali, espressioni regolari ... per sapere esattamente cosa si sta trattando è un array si può fare questo:

Object.prototype.toString.apply(myarray) === '[object Array]' 
Problemi correlati