EDIT: Al volver a leer I No creo que esto responda a su pregunta, pero podría ser útil para que alguien comprenda mejor cómo funciona jQuery de todos modos, así que lo dejo.
Lo que está sucediendo es que jQuery()
se está definiendo como jQuery.fn.init()
que es otra forma de decir jQuery.prototype.init()
que es la función de selección! Lo que esto significa es que nadie llamaría a jQuery.fn.init()
o jQuery.init()
porque jQuery()
ES .init()
!
¿Qué? mirada
Vamos en el trozo de código que estamos hablando:
// Define a local copy of jQuery
var jQuery = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
},
En los comentarios que dice justo lo que dije, pero más brevemente. Pero esto es sólo la copia local de jQuery ... sin embargo, si vas a la línea 908 (de la versión 1.4.4) al final de la función autoejecutable verá:
// Expose jQuery to the global object
return (window.jQuery = window.$ = jQuery);
})();
.. . lo que significa que este jQuery
local se convierte en el jQuery
global. ¿Asi que? Entonces ... ¿este local jQuery
era realmente jQuery.fn.init()
derecho? Entonces, ¿qué es init()
? Si miras desde las líneas 100 a 208, verás que es el método selector. ¿Cuál es el método del selector? Es ese método que usa todo el tiempo para buscar etiquetas, identificadores, clases ... $('#id')
, jQuery('.class')
, $('ul li a')
... ¡la función de selector!
Nadie llamaría a jQuery.init('div')
porque es una versión detallada de jQuery('div')
después de esa asignación. Y recuerde que jQuery.fn
es exactamente lo mismo que decir jQuery.prototype
por lo que realmente todo lo que hace es asignar .init()
como un método del prototipo del objeto jQuery
. ES DECIR. un plugin jQuery.
Puf, eso fue un bocado. Espero que esto tenga sentido, y si alguien tiene alguna corrección en caso de que haya informado mal en alguna parte de esta larga explicación, por favor avíseme.
+1 por solo un gran esfuerzo. Entonces, ¿hay alguna razón en particular para usar el prototipo como ** opuesto ** a solo en el objeto jQuery en sí mismo? ¿Es más rápido o algo así? (No me lo puedo imaginar) –
No tengo una buena respuesta a esa pregunta, lo siento. Puedo hackear una respuesta, pero la certeza sobre esta es superior a mi grado de pago. – mVChr
ídem +1. Nunca entendí realmente lo que estaba haciendo el primer bit fo jquery. gracias, mvchr! – hellatan