jQuery(); //[]
jQuery("#footer"); //[<div id="footer">...</div>]
sé que se puede hacer algo como esto:¿Cómo hace jQuery que el valor devuelto parezca una matriz?
function kablam(tag) {
var els = document.getElementsByTagName(tag);
els.isKablam = true;
return els;
}
var body = kablam("body"); //[<body class="ask-page">...</body>]
body.isKablam; //true
Para regresar una versión "extendida" de la NodeList
que se devuelve del document.getElementsByTagName
.
Sin embargo, jQuery hace lo contrario. Se fusiona el resultado en sí mismo (como se puede ver here y here). Por otra parte, eso no explica cómo se devuelve una matriz-como-objeto-que-mira-como-un-array cuando pase nada a ella:
jQuery(); //[]
Cuando se hace esto, simplemente devuelve jQuery sí. (source)
O a la misma extender, cuando se selecciona el cuerpo de la etiqueta:
jQuery("body"); //[<body class="ask-page">...</body>]
(source)
O, ahora que lo pienso de ella, nada en absoluto:
var o = {}, body = document.getElementsByTagName("body");
jQuery.merge(o, body); //Object, not [...]
Devolver objetos similares a una matriz es muy fácil, ya que la asignación de teclas numéricas es trivial y no es diferente de asignar cualquier otra tecla. Pero, ¿cómo hace jQuery para que parezca una matriz?
Estoy bastante seguro de que '.push' no es necesario :) –
Además, no es necesario que esté en el prototipo. Pruebe esto en la consola: 'a = {length: 0, splice: function() {}}' – Shmiddty