2009-09-22 10 views
7

Mi chiedevo, come funziona il $. in $ .ajax ({...}); lavoro? non ha senso per me. Certo. Ajax come membro ha senso, ma $ non è un nome variabile? o è? Come è definito?

+6

Si tratta di un nome di funzione, hanno una lettura della fonte jQuery. La funzione restituisce in modo efficace un oggetto JQuery che ha il membro 'ajax'. – Lazarus

+1

@Lazarus: in realtà, sebbene la funzione $ restituisca un oggetto jQuery quando viene chiamato, non è quello che sta succedendo qui. $, come tutte le funzioni in JS, è un oggetto e può avere le sue proprietà (ad esempio ajax). l'oggetto jQuery restituito quando chiama $ ("") non ha una proprietà ajax (prova typeof $ (""). ajax invece di typeof $ .ajax) – figha

risposta

16

$ è lo stesso di jQuery. Cioè, puoi scrivere jQuery.ajax (...) ecc.

La parte confusa è $ è un carattere legale nei nomi delle variabili Javascript. Non ha alcun significato speciale, come in PHP o Perl, per esempio.

10

Dalla fonte:

// 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); 
}, 

E 'una funzione (oggetto di prima classe) con proprietà, come ad esempio la funzione ajax si parla.

"$" è un carattere valido per nomi di variabili e, come è possibile vedere dal frammento di codice, $ corrisponde a jQuery.

1

$ è uno dei soli caratteri legali che possono essere utilizzati nei nomi di variabili Javascript. JQuery e altre librerie sfruttano l'inizializzazione di $ per essere una funzione che inizializza l'oggetto jQuery.

Se non ricordo male il codice è un po 'come il seguente:

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

$ Questo è definito all'interno della libreria jQuery per essere un riferimento a jQuery più breve. È possibile scaricare la libreria e vedere le prime righe:

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.$, 

Questa "finestra $", "$" Appartiene all'ambiente finestra di oggetto.

1

In javascript, le funzioni sono oggetti (che possono essere contenuti da variabili). Come tali, possono avere proprietà (e metodi che sono solo proprietà con funzioni come valori). Prova questo:

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!) 

questo è un po 'quello che succede con jQuery.

2

Come spiegato in un certo numero di risorse JavaScript, tra cui Mozilla's JavaScript Guide:

identificatore

Un JavaScript deve iniziare con una lettera, underscore (_), o il simbolo del dollaro ($); i caratteri successivi possono anche essere cifre (0-9). Poiché JavaScript fa distinzione tra maiuscole e minuscole, le lettere includono i caratteri da "A" a "Z" (maiuscolo) ei caratteri da "a" a "z" (lettere minuscole).

Così i seguenti sono tutti legali (anche se mal consigliato) in JavaScript:

var $ = function() {}; 

var ____ = 0; 

var __$__$ = 1; 

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

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