2010-02-22 34 views

Respuesta

17

Esta convención se utiliza al escribir plugins para asegurar que no hay confilict con otras librerías Javascript utilizando el $ notación, mientras asegurando el autor del plugin todavía puede usar este notataion:

(function($){ 
    ... 
})(jQuery); 

el autor declara una función anónima con un solo parámetro ($), e inmediatamente llamar a ella y pasar el objeto jQuery para él. Esto asegura que se llama a la función y que todo está definido en ella.

Una notación más largo podría ser:

function MyDefs($){ 
    ... 
} 
MyDefs(jQuery); 

A pesar de eso crearía una variable MyDefs en el espacio de nombres global. El patrón de función anónimo deja el espacio de nombres global vacío, evitando conflictos.

+0

gracias, ahora lo entiendo. Me gustaría llamar a un método de mi complemento desde un código externo. ¿Cómo puedo hacerlo público? ¿Hay alguna manera de declarar la interfaz? – aneuryzm

+0

bien, encontré la respuesta aquí: http://stackoverflow.com/questions/1204822/jquery-plugin-public-method-function – aneuryzm

+0

Excelente explicación James. Sin embargo, ¿qué sucede si varios complementos hacen '$ .fn.columnize ...' - ¿no sería eso un conflicto? Esto es algo que he estado buscando desde hace un tiempo pero, como todavía no he escrito un complemento, no me ha parecido lo suficientemente urgente como para hacerlo. – belugabob

2

Declara la función columnize como un complemento jQuery que le permite usarlo en elementos como este $('.someSelector').columnize(). Puede leer más sobre plugin authoring here.

0

Acabo de encontrar esto ... ¿es un patrón Proxy?

patrón Proxy

Combinando el conocimiento anterior se da como un desarrollador de JavaScript toda una gran cantidad de energía. Una forma de combinar eso es implementar un patrón proxy en JavaScript, permitiendo a los fundamentos de la programación orientada a aspectos (AOP):

(function() { 
    // log all calls to setArray 
    var proxied = jQuery.fn.setArray; 
    jQuery.fn.setArray = function() { 
    console.log(this, arguments); 
    return proxied.apply(this, arguments); 
    }; 
})(); 

Lo anterior envuelve su código en una función para ocultar el "proxy" -Variable. Guarda el método setArray de jQuery en un cierre y lo sobrescribe. El proxy registra todas las llamadas al método y delega la llamada al original. El uso de apply (this, arguments) garantiza que el que llama no podrá notar la diferencia entre el método original y el proxy.

1

Es probablemente una extensión de jQuery, que básicamente pasan (jQuery) al final como

(function($){ 
    //$ is jQuery here 

    //added columnize function to existing jQuery object 
    $.fn.columnize = function(options) { 

    } 

})(jQuery); 
+0

Sí, es un plugin jQuery. Descubrí que es la misma sintaxis de Proxy Patterns. Por cierto, necesito llamar a una función dentro del complemento. Cuando intento llamarlo, aparece un error (la función no está definida), aunque realmente funciona en el navegador. ¿Cómo puedo hacer que una función sea visible? En la interfaz del complemento? gracias – aneuryzm

+0

¿Sé cómo estás llamando a esa función? se pueden publicar algunos códigos? – YOU

0

No se confundan con el $. En realidad, $ es un nombre de variable válido en JavaScript (como todas las variables que contienen $, source (PDF)).

Así, la primera línea podría ser reformulada como

(function (someVariable) { 

que podría parecer más común. Por lo demás, sí, es un patrón de proxy, y la respuesta de James Wiseman es explicar qué está sucediendo.

0

function($) {...} define una función anónima con un parámetro formal llamado $. $.fn se refiere a la propiedad denominada fn del objeto al que hace referencia la variable $.

Cuestiones relacionadas