2009-09-22 17 views
7

Me preguntaba, ¿cómo funciona el $. en $ .ajax ({...}); ¿trabajo? no tiene sentido para mí. Claro .ajax como miembro tiene sentido, pero $ no es un nombre de variable? ¿O es eso? ¿Cómo se define?

+6

Es un nombre de función, tienen una lectura de la fuente de jQuery. La función devuelve efectivamente un objeto JQuery que tiene el miembro 'ajax'. – Lazarus

+1

@Lazarus: en realidad, aunque la función $ devuelve un objeto jQuery cuando se llama, eso no es lo que está sucediendo aquí. $, como todas las funciones en JS, es un objeto y puede tener sus propias propiedades (es decir, ajax). el objeto jQuery devuelto al llamar $ ("") no tiene una propiedad ajax (prueba typeof $ (""). ajax en comparación con typeof $ .ajax) – figha

Respuesta

16

$ es lo mismo que jQuery. Es decir, puede escribir jQuery.ajax (...) etc.

La parte confusa es $ es un carácter legal en los nombres de las variables de Javascript. No tiene ningún significado especial, como lo hace en PHP o Perl, por ejemplo.

10

De la fuente:

// Map over jQuery in case of overwrite 
_jQuery = window.jQuery, 
// Map over the $ in case of overwrite 
_$ = window.$, 

jQuery = window.jQuery = window.$ = function(selector, context) { 
// The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context); 
}, 

Es una función (objeto de primera clase) con propiedades, tales como la función ajax mencionas.

"$" es un carácter válido para nombres de variables, y como puede ver en el fragmento de código, $ es lo mismo que jQuery.

1

$ es uno de los únicos caracteres legales que se pueden usar en los nombres de las variables de Javascript. JQuery y otras bibliotecas aprovechan que inicializar $ es una función que inicializa el objeto jQuery.

si no recuerdo mal el código parece algo así como lo siguiente:

$ = window.jQuery = function(){ 
    return new jQuery(args); 
} 
2

$ Esto se define dentro de la biblioteca jQuery para ser una referencia a jQuery más corto. Puede descargar la biblioteca y ver las primeras líneas:

var 
    // Will speed up references to window, and allows munging its name. 
    window = this, 
    // Will speed up references to undefined, and allows munging its name. 
    undefined, 
    // Map over jQuery in case of overwrite 
    _jQuery = window.jQuery, 
    // Map over the $ in case of overwrite 
    _$ = window.$, 

Este "ventana $", "$" Pertenece al medio ambiente objeto de la ventana.

1

En javascript, las funciones son objetos (que pueden contenerse mediante variables). Como tales, pueden tener propiedades (y métodos que son solo propiedades con funciones como valores). Pruebe esto:

function test() { 
    alert("hey!"); 
} 
test.foo = function (msg) { 
    alert("you said: "+msg); 
}; 

test(); //alerts "hey!" 
test.foo("123") //alerts ""you said: 123". 

//note that I'm not calling test().foo(), 
//as test() returns nothing, though it could 
//return an object (with a foo() or any other method itself!) 

esto es algo así como lo que sucede con jQuery.

2

Como se explica en una serie de recursos de JavaScript, incluyendo Mozilla's JavaScript Guide:

identificador

Una JavaScript debe comenzar con una letra, subrayado (_) o un signo de dólar ($); los caracteres siguientes también pueden ser dígitos (0-9). Debido a que JavaScript distingue entre mayúsculas y minúsculas, las letras incluyen los caracteres "A" a "Z" (mayúsculas) y los caracteres "a" a "z" (minúsculas).

Así que los siguientes son todos legales (aunque poco aconsejable) en JavaScript:

var $ = function() {}; 

var ____ = 0; 

var __$__$ = 1; 

function _$_$_$_(_, __, $_$) { 
    return (_ * __) + $_$; 
} 

alert(_$_$_$_(3,2,1)); // shows 7 
Cuestiones relacionadas