Mirando el código fuente jQuery será aclarar las cosas. Por cierto, jQuery
y $
se refieren al mismo objeto, y así es como se define el objeto jQuery:
var jQuery = function(selector, context) {
return new jQuery.fn.init(selector, context);
}
jQuery
es una función y en Javascript, una función es también un objeto del tipo Function
. Por lo tanto, jQuery.f
o $.f
conecta f
al objeto jQuery Function
, o llámele la clase jQuery si lo desea.
si nos fijamos en la fuente de jQuery, verá que jQuery.prototype
se ha asignado a jQuery.fn
jQuery.fn = jQuery.prototype
Por lo tanto, siempre que se adjunta un método (o propiedad) a jQuery.fn
, como en jQuery.fn.f = ..
, o $.fn.f = ..
, o jQuery.prototype.f = ..
, o $.prototype.f = ..
, ese método estará disponible para todas las instancias de esta clase jQuery (una vez más, no hay clases en Javascript, pero puede ayudar a comprender).
Cada vez que se invoca la función jQuery()
, como en jQuery("#someID")
, una nueva instancia de jQuery se crea en esta línea:
return new jQuery.fn.init(selector, context);
y este caso tiene todos los métodos atamos al prototipo, pero no los métodos que se adjuntaron directamente al objeto Function
.
Recibirá una excepción si intenta llamar a una función que no estaba definida en el lugar correcto.
$.doNothing = function() {
// oh noez, i do nuttin
}
// does exactly as advertised, nothing
$.doNothing();
var jQueryEnhancedObjectOnSteroids = $("body");
// Uncaught TypeError: Object #<an Object> has no method 'doNothing'
jQueryEnhancedObjectOnSteroids.doNothing();
Ah, y finalmente cortar un hilo largo y corto para responder a su pregunta - haciendo $.f = $.fn.f
le permite utilizar la función como un plugin o un método de utilidad (en la jerga jQuery).
Entonces, ¿cuál es el beneficio de $ .f = $ .fn.f? – qodeninja
¿qué quieres decir con cuál es el beneficio? Ellos sirven diferentes propósitos. ¿Puedes decir dónde has visto a los autores de los complementos usando '$ .f = $ .fn.f'? –
SimpleModal hace esto http://www.ericmmartin.com/projects/simplemodal/ – qodeninja