2012-09-11 14 views
5

Estoy leyendo un libro en JavaScript que explica cómo usar el patrón MVC con aplicaciones de JavaScript. En este código, muestra cómo configurar un controlador. ¿Alguien puede explicar por qué el signo de dólar jQuery se pasa como un parámetro a la función en la línea 3, y luego por qué no hay un signo de dólar delante de (jQuery) en la última línea?

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function($){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    $(function(){ 
     $("#view .name").click(nameClick); 
    }); 
})(jQuery); 
+0

muesca adecuada puede ayudar a entender lo que está pasando. –

+0

@KevinB si el final (jQuery) de hecho está llamando a la función, ¿no debería estar en su propia línea? – Leahcim

+0

no, '(jQuery)' pasa 'jQuery' como argumento a la función almacenada en' Controller.users'. Usted no divide esto en dos líneas, ¿verdad? 'alerta (" ¡Hola mundo! ")' –

Respuesta

6

No hay signo de dólar en frente de jQuery en la última línea, porque el nombre de la variable que contiene jQuery es jQuery, no $jQuery. Se pasa inmediatamente como $ para evitar conflictos de nombres.

+1

así es (jQuery); llamando a la función anónima? por favor explica si puedes. Soy un poco inexperto (aunque he leído algunos libros) – Leahcim

+1

@Michael: ¡Sí! (No es realmente anónimo, sin embargo, está asignado a 'Controller.users' también). – Ryan

1

El jQuery que se pasa a la función proporciona el argumento para $ en la función. En otras palabras, para garantizar que la función entienda que $ es el objeto jQuery, se pasa el nombre completo del objeto jQuery en lugar del atajo $. Esto ayuda en los casos en que otras bibliotecas de JavaScript están en uso y pueden competir por la asignación $.

2

Simplemente, se asegura de que nada se llame $ en ese contexto.

La variable jQuery se llama jQuery, $ es un símbolo válido en un nombre de variable, y jQuery lo ha utilizado para almacenar el objeto jQuery. El código anterior podría fácilmente ser reescrito para usar cualquier otro nombre de la variable en lugar de $

var Controller = {}; 
// Use a anonymous function to enscapulate scope 
(Controller.users = function(myJQueryVariable){ 
    var nameClick = function(){ 
     /* ... */ 
    }; 

    // Attach event listeners on page load 
    myJQueryVariable(function(){ 
     myJQueryVariable("#view .name").click(nameClick); 
    }); 
})(jQuery); 
Cuestiones relacionadas