2016-08-12 3 views
0

Mein js tut dies:javascript Modulerstellung und Initialisierung

var MyClass ={ 
     a: 1, 
     b: 2, 
     init: function(message){ console.log("calling c to say "+message);}; 
}; 

MyClass.init("hello"); 

// alle obigen Code ist in js Datei

Ich halte die IIFE Muster überall zu sehen, aber ich fürchte, ich weiß nicht Sehen Sie, welchen Vorteil es mir gegenüber oben bringt. Ich habe ein Modul MyClass und die Möglichkeit, Methoden darauf aufzurufen. Gibt es einen Nachteil, dieses Muster zu verwenden?

+1

Der Nachteil ist, dass es ein einfaches Objekt ist und Sie nicht die Kapselung durch einen Verschluss zur Verfügung gestellt haben. – vlaz

+0

Könnten Sie bitte näher darauf eingehen? Ich verstehe, was in der folgenden Antwort passiert, aber das hat nichts mit meiner Modul-Erstellung zu tun. Die Antwort ist nur eine Funktion und etwas Code zu executing. Es wird kein Modul oder keine Encapsulation erstellt. Willst du sagen, dass ich in meinem Objekt auf MyClass.a und MyClass.b usw. zugreifen kann, aber wenn ich ein IIFE verwenden würde, könnte ich das kontrollieren? Wenn ich das als IIFE umschreiben müsste, wie würde ich es tun? Danke, ich bin js newb –

+0

Natürlich gibt es Kapselung - Sie können 'x' nicht erreichen, weil es in der Schließung ist. Die Antwort erstellt kein Modul, aber es ist, weil die Absicht ist, zu zeigen, was Ihrer Lösung fehlen würde, nicht, weil es zeigt, "wie man ein Modul macht". Angesichts der Tatsache, dass Sie behaupten, dass Sie das bereits wissen, wäre es überflüssig, noch einmal darüber zu sprechen. – vlaz

Antwort

1

Ein IIFE wird verwendet, um eine neue Funktion Bereich erstellen Variablen in den globalen Bereich zu vermeiden undicht:

(function() { 
    var x = 1; 
    console.log(x); // 1 
})(); 

console.log(x);  // undefined 

Diese im Grunde nichts mit Aufruf einer Funktion gespeichert in einem Objekt wie in Ihrem Beispiel zu tun.

Verwandte Themen