2012-05-26 10 views
13

Si lo hace console.log($('some selector')) en el navegador, devuelve lo que parece ser una matriz (primera línea):

picture from latest version of chrome web console on Github project page

Pero Tenga en cuenta que no es un instanceof Array, pero en realidad es the jQuery object.

Cuando lo hace console.dir($('h1')), muestra que en realidad es el objeto jQuery.

La pregunta es, ¿cómo hacen que parezca una matriz en la consola web? Observé en la fuente de jQuery here que añaden referencia a algunos métodos de Array y Object, y here añaden toArray (y slice y otros) al objeto jQuery. ¿La consola web está buscando de alguna manera estos métodos y si encuentra uno (toArray, indexOf, slice, etc.), lo imprime como una matriz? Me gustaría obtener este comportamiento de cualquier objeto personalizado, como el Ember.ArrayProxy. Actualmente, cuando registra el Ember.ArrayProxy, muestra > Object o lo que sea, pero sería bueno mostrarlo como una matriz.

¿Alguna idea?

+0

¿Es esa una imagen de código? – jimw

+0

Sí, es una imagen –

+0

Relacionados: http://stackoverflow.com/questions/6599071/array-like-objects-in-javascript. – pimvdb

Respuesta

15

a hacer su objeto hereda Array usando el prototipo, así:

function SomeType() { 
    this.push(16); 
} 

SomeType.prototype = []; 
SomeType.prototype.constructor = SomeType; // Make sure there are no unexpected results 

console.log(new SomeType()); // Displays in console as [16] 

Y, por supuesto, todos los objetos jQuery son instancias de la función jQuery/constructor, por lo que es como jQuery hace. Como beneficio adicional, debido a la herencia, obtienes todos los métodos del Array y la indexación que viene con él también.

+0

¿Funciona esto en el navegador? –

+0

@LancePollard: sí. – Ryan

+2

¡Agradable! Bueno, acabo de hacer algunas otras pruebas, y si haces esto: 'var x = {length: 0, splice: Array.prototype.splice}', entonces 'x' se verá como una matriz. Extraño ... Requiere específicamente esas 2 propiedades que parece. –

Cuestiones relacionadas