2009-03-15 20 views
5

che sto cercando di imitare le variabili statiche su una funzione JavaScript, con le seguenti finalità:variabili statiche in una funzione anonima

$.fn.collapsible = function() { 
    triggers = $(this).children('.collapse-trigger'); 
    jQuery.each(triggers, function() { 
    $(this).click(function() { 
     collapse = $(this).parent().find('.collapse'); 
    }) 
    }) 
} 

Come si salva l'oggetto "collasso" in modo che non ha bisogno di essere "trovato" su ogni chiamata? So che con funzioni denominate potrei fare qualcosa come "someFunction.myvar = collapse", ma che ne dici di funzioni anonime come questa?

Grazie!

risposta

11

È possibile salvare la variabile nella funzione, utilizzando functioName.myVar = value o arguments.callee.myVar = value se non si dispone del nome della funzione corrente.

arguments.callee è la funzione corrente si è in.

+0

Funziona come un incanto, grazie! – Ivan

0

Finché si assegna la funzione a una variabile del genere, è possibile accedervi come $.fn.collapsible e quindi assegnare le variabili come $.fn.collapsible.myvar.

+0

Questo non funzionerebbe perché non è la funzione a cui sto tentando di associare una variabile. Grazie. – Ivan

8

Per funzione anonima è possibile utilizzare una funzione che restituisce una funzione.

Per esempio:

var myAnonymousFunction = (function(){ 
    var myFirstStatic = $("#anElement"); 
    var anotherStatic = true; 
    return function(param1,param2) { 
     // myFirstStatic is in scope 
     // anotherStatic also 
    } 
})(); 

dovrebbe funzionare come un fascino e il gioco è il codice di inizializzazione sicura per statica viene eseguito solo una volta.

+0

Sono stato tentato di usare questo, ma è un po 'di confusione per il mio cervello. Grazie comunque. – Ivan

1

Sembra che una risposta migliore a questa domanda sia trovata elsewhere on Stack Overflow.

In breve, è possibile assegnare effettivamente nomi di funzioni anonime senza inquinare lo spazio dei nomi, consentendo comunque l'autoreferenzialità.

mything.prototype.mymethod = function myKindOfFakeName() { 
    myKindOfFakeName.called = true; 
} 
+1

Stava per rispondere a questo. Non è necessario che le espressioni di funzione siano anonime. –

Problemi correlati