2009-09-23 13 views
37

Capisco l'uso del simbolo (singolo) in librerie JavaScript popolari come jQuery e Prototype. Capisco anche il significato del doppio simbolo del dollaro in PHP (variabili variabili). Dean Edwards utilizza il doppio simbolo del dollaro nella sua famosa funzione addEvent() JavaScript. Ecco un eccezione che contiene l'uso del simbolo del dollaro doppia:JavaScript Double Dollar Sign

function addEvent(element, type, handler) { 
    // assign each event handler a unique ID 
    if (!handler.$$guid) handler.$$guid = addEvent.guid++; 
    // create a hash table of event types for the element 
    if (!element.events) element.events = {}; 
    // create a hash table of event handlers for each element/event pair 
    var handlers = element.events[type]; 
    if (!handlers) { 
    handlers = element.events[type] = {}; 
    // store the existing event handler (if there is one) 
    if (element["on" + type]) { 
     handlers[0] = element["on" + type]; 
    } 
    } 
    // store the event handler in the hash table 
    handlers[handler.$$guid] = handler; 
    // assign a global event handler to do all the work 
    element["on" + type] = handleEvent; 
}; 
// a counter used to create unique IDs 
addEvent.guid = 1; 

Da quello che ho letto, il simbolo del dollaro ha ufficialmente solo un significato in JavaScript per gli strumenti di generazione di codice, anche se tale norma è in gran parte ignorato oggi a causa di il dollaro segna un uso diffuso nelle librerie JavaScript di cui sopra.

Qualcuno può far luce su questo utilizzo del doppio segno del dollaro in JavaScript?

Grazie mille!

+1

Mi sembra che questo 'addEvent' perderà come un setaccio in IE. – kangax

risposta

74

Ho scritto questa funzione. :)

Non c'è più alcun significato speciale per i prefissi $$. Era una notazione che usavo quando packer era popolare. Packer accorcia i nomi delle variabili con questo prefisso. Oggigiorno Packer abbrevia automaticamente i nomi delle variabili, quindi questa notazione è ridondante.

Risposta breve, il segno $ è un identificatore valido in JavaScript, quindi stai guardando solo una serie di brutti nomi di variabili.;)

+8

Grazie per la risposta autorevole ... bello sentirlo dalla bocca del cavallo, per così dire! – NewToThis

3

Per quanto ne so, il simbolo del dollaro è solo un carattere normale che può essere utilizzato nei nomi di variabili. Potrebbe essere una convenzione per significare una proprietà che non dovrebbe essere confusa con.

La mia ipotesi è che l'autore abbia utilizzato $$guid per evitare il contrasto con i nomi di proprietà esistenti. Probabilmente avrebbe usato lo __guid o qualcosa di simile.

20

Beh, davvero, è solo la convenzione di denominazione dello sviluppatore. "$$" potrebbe anche essere "aa", a tutti gli effetti.

Come già accennato, la funzione di segno unico dollaro $() è diventata quasi standard in varie librerie JavaScript. "L'unica funzione per domarli tutti", eh? Ma ricorda, non è niente di inerente allo stesso JS. È solo un nome di funzione che ha preso il nome di sostituire document.getElementById().

Quindi, con quello detto, $$ potrebbe essere qualsiasi cosa. Heck, si potrebbe anche avere una funzione come questa:

function $$$$$$$$(){ 
    //i've got dollar signs in my eyes! 
} 

In altre parole, è solo un/funzione di variabili nome, proprio come tutto il resto.

+0

Great..grazie per aver confermato che non c'era più di quello! – NewToThis

6

Proprio come altri hanno già detto, $$ è un identificatore arbitrario.

Il toolkit JavaScript MochiKit riserva una funzione identificata dallo stesso a select elements using CSS selector syntax, proprio come fa jQuery, tranne senza il dover avvolgere tutti gli elementi corrispondenti in un oggetto speciale.

Quindi, sì, non è niente di particolarmente speciale, di per sé.

+6

Mi piacerebbe sapere perché * & @ # $ !! le persone mi stanno sottovalutando su questo; se hai intenzione di esprimere un voto negativo, almeno sii gentile a menzionare PERCHÉ. –

1

doppio simbolo del dollaro si fa riferimento nei seguenti termini -

//getElementById  
    function $$(id){ 
    return document.getElementById(id); 
    } 
+0

Buona presa. Questo è quello che stavo cercando ... dove è definito? C'è un riferimento da qualche parte, qualcosa del calibro di Mozilla Developer Network? – zipzit

Problemi correlati