2017-02-14 7 views
3

Ich bin dabei, ein kleines Javascript-Modul für eine App zu bauen. Ich wurde zwei verschiedenen Arten der Code-Organisation ausgesetzt: dem Objekt-Literal und dem IIFE. Ich weiß, dass mit dem IIFE alle Variablen und Funktionen privat bleiben, wenn sie nicht anderweitig veröffentlicht werden, aber gibt es andere Gründe, warum ich das über das Objektliteral verwenden würde?Wann ein IIFE vs Objektliterale zu verwenden?

Warum sollte ich das Objektliteral verwenden:

var gojiraSays = 'Toxic Garbage Island!!!' 

var app = { 

    printStuff: function(){ 
    console.log(gojiraSays) 
    } 

} 

... sagen über die IIFE Version:

var app = (function(){ 
    var gojiraSays = 'Toxic Garbage Island!!!' 

    var yellGojira = function(){ 
    console.log(gojiraSays); 
    } 

    return{ 
    yellGojira: yellGojira 
    } 

}()); 

app.yellGojira(); 
+2

Das hängt von zu vielen verschiedenen Dingen ab. Wenn Sie zum Beispiel beabsichtigen, dass Ihr Modul mit etwas wie WebPack verwendet wird, ist das IIFE vollständig redundant. – Marty

+1

Nach der Bearbeitung, ja, der Vorteil der Umhüllung in einem IIFE ist Verkapselung (nichts anderes kann mit Ihrem 'gojiraSays' verwirren). Es gibt IIFE in anderen Zusammenhängen (nicht als Kontrast zu Objektliteralen), z. innerhalb 'for' oder' while' Schleifen, um den Wert von lokalen Variablen statt der Variablen selbst für asynchrone Rückrufe zu erfassen ([http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple- praktisches Beispiel)). – Amadan

+1

das sind zwei verschiedene Dinge. IIFEs befassen sich mit der Kapselung von (privaten) Variablen, während Objekte eine Struktur zum Kombinieren/Gruppieren von zusammengehörenden Dingen bereitstellen. IIFEs bieten keine Struktur und Objekte bieten keine Kapselung. Ihre Frage ist wie eine Frage, die Sie bevorzugen: Funktionen oder Variablen? Sie werden beide brauchen, und Sie werden sie wahrscheinlich kombinieren. – Thomas

Antwort

1

Sie ein drittes lernen sollten, eine bessere Art und Weise Module der Organisation, die ES6 ist Module, was all das irrelevant macht.

Sie benötigen ein wenig Infrastruktur, z. B. einen Babel-Transpilationsschritt, damit das funktioniert.

2

Module Muster

Siehe this Antwort Wissen über Vorteile der Verwendung von Objektliteral zusammen mit Revealing Modul Muster (RMP) zu gewinnen.

IIFE

Siehe this Link Informationen über Vorteile der Verwendung von IIFE der für Projektstrukturierung zu erhalten.

Mein Vorschlag

Ich ziehe es wird RMP mit, wie es Ihnen effizient getrennten Bedenken ermöglicht und verbessert die Lesbarkeit zugleich.

+0

Ich bin durch diese Antwort verwirrt. Das blöd benannte "enthüllende Modulmuster" ** verwendet ** IIFEs, also wie kann man die beiden als irgendwie Alternativen behandeln? –

+0

Dies wird Ihnen helfen, Ihre Zweifel zu beantworten http://stackoverflow.com/questions/22906662/javascript-design-pattern-difference-between-module-pattern-and-revealing-modul –

Verwandte Themen