Estoy tratando de entender la sintaxis del complemento jquery, porque quiero fusionar dos complementos en uno. El intermitente que también debe poder detener el intervalo o ejecutarse varias veces.
De todos modos, esta sintaxis es la misma que
jQuery.fn.extend({
everyTime: function(interval, label, fn, times) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, times);
});
},
oneTime: function(interval, label, fn) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, 1);
});
},
esta
$.fn.blink = function(options)
{
porque parece que el primero (sin =) es una forma de configurar varios métodos a la vez. ¿Es esto correcto? Además, mientras estoy aquí, ¿cuál sería la razón para agregar los elementos y algo de lógica al objeto jquery?
jQuery.extend({
timer: {
global: [],
guid: 1,
dataKey: "jQuery.timer",
(esto es del complemento del temporizador)
Respuestas:
jQuery.extend se usa para extender cualquier objeto con funciones adicionales, pero jQuery.fn.extend se usa para extender el objeto jQuery.fn, que de hecho agrega varias funciones de complemento de una sola vez (en lugar de asignar cada función por separado).
jQuery.extend :
var obj = { x: function() {} } jQuery.extend(obj, { y: function() {} }); // now obj is an object with functions x and y
jQuery.fn.extend :
jQuery.fn.extend( { x: function() {}, y: function() {} }); // creates 2 plugin functions (x and y)
fuente
jQuery.extend({ abc: function(){ alert('abc'); } });
Uso:
$.abc()
. (No se requiere selector como$.ajax()
.)jQuery.fn.extend({ xyz: function(){ alert('xyz'); } });
Uso:
$('.selector').xyz()
. (Selector requiere like$('#button').click()
.)Principalmente se utiliza para implementar
$.fn.each()
.Espero que ayude.
fuente
En realidad, no hay ninguno aparte de su referencia base. En la fuente de jQuery , puede leer:
jQuery.extend = jQuery.fn.extend = function() { … };
¿Entonces, cómo funciona? La documentación dice:
Es solo un bucle for-in que copia propiedades, mejorado con una bandera para recursar objetos anidados. Y otra característica:
// then the following will happen: target = this;
Entonces, si la función se invoca en
jQuery
sí misma (sin un objetivo explícito), extenderá el espacio de nombres jQuery. Y si se llama a la funciónjQuery.fn
(sin un objetivo explícito), extenderá el objeto prototipo jQuery donde se encuentran todos los métodos (complementos).fuente
Esta publicación de blog tiene una buena descripción:
$.fn.extend({ myMethod: function(){...} }); //jQuery("div").myMethod(); $.extend({ myMethod2: function(){...} }); //jQuery.myMethod2();
Citas:
Como regla general, debes extender el objeto jQuery para funciones y el objeto jQuery.fn para métodos. No se accede a una función, a diferencia de un método, directamente desde el DOM.
fuente
directly from the DOM
se refiere a un concepto muy básico de JavaScript de llamada de función frente a propiedad de objeto / llamada de prototipo (en el contenedor de jQuery alrededor de objetos DOM nativos). Vea el ejemplo e intente encontrar la diferencia y piense por qué el código de los ejemplos no es intercambiable.$.fn.something= function{};
apunta al jQuery.prototype y permite acceder a los elementos dom a través de "this". Ahora puedes usar
$(selector).something();
Así que esto funciona como una función de complemento como$(selector).css();
$.something = function{};
agrega una propiedad o función al propio objeto jQuery y no puede usar "this" para el acceso dom Ahora puede usarlo como
$.something()
; esto funciona como una función de utilidad como$.trim()
pero
permite agregar más de 1 función al mismo tiempo. También se pueden usar para fusionar dos literales de objeto en caso de que proporcionemos más de un objeto.
fuente