2016-05-07 4 views
0

Also ich baue eine kleine App und mein JavaScript-Code basiert auf dem Modul-Muster, weil ich denke, dass es eine wirklich saubere Methode der Codierung in JavaScript ist. Allerdings habe ich zwei Beispiele gesehen, die den folgenden Code verwendet und der andere nicht:Zweck der Rückgabe {} im JavaScript-Modulmuster?

return { 
    someMethod: someMethod, 
    otherMethod: otherMethod 
} 

Was ist der Zweck des obigen Code und ist sie nötig?

+1

Es ist nur Code, um ein Objekt zurückzugeben. Der Zweck hängt vom Kontext ab, aber es ist nur ein Objektliteral. – Pointy

Antwort

1

Es wird lediglich ein Objekt zurückgegeben. Der Code:

return { 
    someMethod: someMethod, 
    otherMethod: otherMethod 
} 

ist genau identisch mit:

var someObject = { 
    someMethod: someMethod, 
    otherMethod: otherMethod 
} 

return someObject; 
+0

Okay, aber ich könnte trotzdem die Methoden aufrufen? Deshalb war ich mir nicht sicher, wie es für den Code einen Unterschied macht. – Elevant

+2

Es ist genau dasselbe, außer dass Sie nicht explizit eine Variable verwenden müssen, um das Objekt zu speichern, das Sie erstellen. Es macht genau null Unterschied, wie es funktioniert. – slebetman

+1

Es gibt eine Tradition unter den funktionalen Programmierern, Namen zu deklarieren. FP-Leute bevorzugen anonyme Funktionen und Wertliterale, wo immer es möglich ist, um zu vermeiden, entscheiden zu müssen, wie das Ding benannt werden soll, das Sie deklarieren. Der Grund dafür ist, dass in reinen FP Variablen nicht erlaubt sind (nur Konstanten sind erlaubt). Daher vermeiden FP-Programmierer in einer nicht-reinen FP-Sprache das Deklarieren von Variablen und Funktionsnamen. – slebetman

0
// create an scope by declaring anonymous function and immediately executing it 
// the return value will be assigned to myModule... 
var myModule = (function(){ 

    // return the parts of the scope to be exposed publicly 
    return { 
     someMethod: someMethod, 
     otherMethod: otherMethod 
    } 

    function someMethod(item){ return myPrivateSquareFunction(item) * 2; }; 
    function otherMethod(item){ return item * 5; }; 
    // private function can be called from in the module's scope, but not externally 
    function myPrivateSquareFunction(item){ return item * item; } 

})(); 

// now, out here you can call `otherMethod`, and `someMethod` (which itself calls `myPrivateSquareFunction`) but you can not call `myPrivateSquareFunction`... 

console.log(someMethod(3)); // 18 
console.log(otherMethod(3)); // 15 
console.log(myPrivateSquareFunction(3)); // ERROR! 

dieses Muster verwenden, können Sie wählen, welche Implementierungsdetails privat bleiben, und was an das Modul ausgesetzt werden muss. Dies hilft Ihnen dabei, Ihren Code in diskrete Abschnitte aufzuteilen, die isoliert bearbeitet und getestet werden können, ohne dass der Rest der Anwendung die Funktion verkompliziert. Wenn Sie dann viele kleine Codeabschnitte haben, die ihren eigenen Job korrekt ausführen und ordnungsgemäß getrennt sind, ist es einfacher, sie zu einer komplexeren Anwendung zusammenzustellen.