2010-01-02 16 views
74

Estoy tratando de entender la sintaxis del plugin jquery, porque quiero fusionar dos complementos en uno. La luz intermitente que también debe poder detener el intervalo o ejecutar varias veces.Diferencia entre jQuery.extend y jQuery.fn.extend?

De todos modos, es esta sintaxis lo mismo 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); 
     }); 
    }, 

este

$.fn.blink = function(options) 
    { 

porque parece que la primera (sin =) es una manera de establecer varios métodos a la vez. ¿Es esto correcto? También mientras estoy aquí ¿Cuál sería el motivo para agregar los elementos y cierta lógica al objeto jquery?

jQuery.extend({ 
    timer: { 
     global: [], 
     guid: 1, 
     dataKey: "jQuery.timer", 

(esto es desde el plugin temporizador)

gracias, Richard

Respuesta

83

jQuery.extend se utiliza para extender cualquier objeto con funciones adicionales, pero jQuery.fn.extend se utiliza para extender la jQuery.fn objeto, que de hecho agrega varias funciones de complemento de una 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) 
+0

gracias, eso es claro acerca de asignar objetos múltiples, pero todavía no estoy seguro de cuándo se debe usar jquery.extend. ¿Por qué pasarías algo que haces en fn.extendir a jquery.extend? También puedo publicar una nueva pregunta para esto, porque hice dos preguntas. – Richard

+12

jQuery.extend() es en realidad una función de conveniencia que se puede utilizar en su propio código de JavaScript para extender objetos de forma genérica. Es parte de las funciones de "utilidad" en jQuery (no se usa para la manipulación DOM) –

64
jQuery.extend({ 
    abc: function(){ 
     alert('abc'); 
    } 
}); 

uso: $.abc(). (No se requiere como selector de $.ajax().)

jQuery.fn.extend({ 
    xyz: function(){ 
     alert('xyz'); 
    } 
}); 

uso: $('.selector').xyz(). (Se requiere un selector como $('#button').click().)

Principalmente se utiliza para implementar $.fn.each().

Espero que ayude.

18

Diferencia entre jQuery.extend y jQuery.fn.extend?

En realidad, no hay ninguno aparte de su referencia base. En el jQuery source, se puede leer:

jQuery.extend = jQuery.fn.extend = function() { … }; 

Entonces, ¿cómo funciona? El documentation dice:

Fusiona el contenido de dos o más objetos juntos en el primer objeto.

Es solo un for-in-loop que copia las propiedades, creadas con una bandera para recrear los objetos anidados. Y otra característica:

Si se suministra sólo un argumento a $.extend(), esto significa que el argumento de destino se omitió

// then the following will happen: 
target = this; 

lo tanto, si la función es llamada en jQuery sí mismo (sin objetivo explícito), extenderá el espacio de nombres jQuery. Y si se llama a la función en jQuery.fn (sin objetivo explícito), extenderá el objeto prototipo jQuery donde se encuentran todos los métodos (complementos).

+0

Mi voto favorable !!!! a esto . Estaba mirando el código fuente para ver cómo se extiende jQuery – dekdev

13

This blog post tienen buena descripción:

$.fn.extend({ 
myMethod: function(){...} 
}); 
//jQuery("div").myMethod(); 

$.extend({ 
myMethod2: function(){...} 
}); 
//jQuery.myMethod2(); 

Cotizaciones:

Como regla general, debe ampliar el objeto jQuery para las funciones y el objeto jQuery.fn de métodos. A una función, a diferencia de un método, no se accede directamente desde el DOM.

+0

¿Qué significa acceder a un método * 'directamente desde el DOM' *? –

+0

'directamente del DOM' se refiere al concepto muy básico de JavaScript de llamada de función frente a propiedad de objeto/llamada de prototipo (en envoltorio jQuery alrededor de objetos DOM nativos). Vea el ejemplo y trate de encontrar la diferencia y piense por qué el código en los ejemplos no es intercambiable. – gavenkoa

7
$.fn.something= function{}; 

apunta a la jQuery.prototype y permite a los elementos de acceso Dom de "este". Ahora u puede utilizar $(selector).something(); Así que esto funciona funcionan como complemento al igual que $(selector).css();

$.something = function{}; 

añade una propiedad o función a la jQuery objeto en sí mismo y u no puede utilizar "esto" para acceder dom ahora u puede utilizarlo como $.something(); esto funciona como una función de utilidad como $.trim()

pero

$.fn.extend({function1(), function2()}) and $.extend({function1(), function2()}) 

permite añadir más de 1 función al mismo time.Also que se pueden utilizar para unir dos objetos literales en caso de que proporcionar más de un objeto.