2009-03-15 11 views
5

I statische Variablen auf einer JavaScript-Funktion, mit folgendem Zweck zu imitieren bin versucht:Statische Variablen in einer anonymen Funktion

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

Wie kann ich das „Zusammenbruch“ Objekt speichern, so dass es nicht muss bei jedem Anruf "gefunden" werden? Ich weiß, dass ich mit benannten Funktionen etwas wie "someFunction.myvar = collapse" machen kann, aber wie steht es mit anonymen Funktionen wie diesem?

Danke!

Antwort

11

Sie können Ihre Variable in der Funktion speichern, indem Sie entweder functioName.myVar = value oder arguments.callee.myVar = value verwenden, wenn Sie den aktuellen Funktionsnamen nicht haben.

arguments.callee ist die aktuelle Funktion sind Sie in.

+0

Funktioniert wie ein Charme, danke! – Ivan

0

Solange Sie die Funktion einer Variablen wie dieser zuweisen, sollten Sie in der Lage sein, als $.fn.collapsible darauf zuzugreifen, und so Variablen wie $.fn.collapsible.myvar zuweisen.

+0

Das würde nicht funktionieren, weil das nicht die Funktion ist, an die ich versuche, eine Variable anzuhängen. Vielen Dank. – Ivan

8

Für anonyme Funktion eine Funktion verwenden könnte, die eine Funktion zurückgibt.

Zum Beispiel:

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

Sollte wie ein Zauber funktioniert und Sie sind versichert Initialisierungscode für Statik wird nur einmal ausgeführt.

+0

Ich war versucht, dies zu benutzen, aber es ist irgendwie verwirrend für mein Gehirn. Danke trotzdem. – Ivan

1

Es scheint, dass eine bessere Antwort auf diese Frage gefunden wird elsewhere on Stack Overflow.

Kurz gesagt, Sie können anonyme Funktionen Namen geben, ohne den Namespace zu verschmutzen, aber dennoch eine Selbstreferenzierung zu erlauben.

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

War im Begriff, dies zu beantworten. Funktionsausdrücke müssen nicht anonym sein. –

Verwandte Themen