2010-11-29 5 views
0

Ich baue meine erste OO JS-Bibliothek und im ein wenig Mühe mit einem Stück hat, die wahrscheinlich super einfach ist ...Setzen Sie meine Variable auf eine anonyme Funktion mit einem Parameter?

Ich habe dies:

var storageLocker = function(catalog){ 
    if(catalog){ 
     this.catalog = catalog; 
    } 
    //my code... 
}() 

ich brauche, was zu tun in der Lage sein andere Bibliotheken wie jQuery tun, wo Sie ein Element auswählen können (in meinem Fall wählen Sie ein localStorage-Element) und dann andere Funktionen daran ketten. Ich hatte, dass alle Arbeiten, aber für die beste Praxis und es dehnbarer ich es in einer anonymen Funktion setzte später zu machen, und jetzt kann ich nicht herausfinden, wie die Syntax hat:

storageLocker('localStorageItem').save({"item":"an example item saved to localStorageItem"}) 

aber jetzt, wenn ich mache das jetzt mit dieser syntax es gibt diesen fehler zurück:

Uncaught TypeError: Property 'storageLocker' of object [object DOMWindow] is not a function 

Irgendwelche Ideen?

+0

Ich lese Ihre andere Frage dazu, und wenn Sie private Variablen verwenden möchten, müssen Sie mit Schließung arbeiten. Das heißt, Sie sollten dieses Konstrukt _with_ '()' am Ende verwenden, aber Sie müssen eine zweite Funktion von innen zurückgeben, die Ihre eigentliche Logik verarbeitet. Bei der anderen Frage gab es ein gutes Beispiel. – jwueller

Antwort

4

Entfernen Sie die () am Ende des Funktionskörpers.

Sie schrieb var storageLocker = function(...) { ... }(), die eine anonyme Funktion erstellt, es nennt, und ordnet das Ergebnis-storageLocker.

Es ist äquivalent zu

function anonymous(...) { ... }; 
var storageLocker = anonymous(); 

Da die Funktion nichts zurückgibt, storageLocker endet undefined zu sein, und ist keine Funktion.

+0

Awn ... duh ... danke :) –

+0

@Oscar: Gern geschehen. Sie sollten diese Antwort akzeptieren. – SLaks

+1

Habe versucht, aber ich musste 10 Minuten warten :) –