2017-12-21 8 views
-1

Ich habe einige Übungen auf der interessanten "level up your coding" Seite gemacht, Exercism.io und sie benutzen die CommonJS Style Module für ihre Code Samples und Tests mit Jasmine. Ich habe immer gedacht, dass Module ein Problem sind, mit dem ich nicht umgehen wollte, aber in diesen Bissgrößen-Brocken sehen sie aus, als könnten sie sehr nützlich sein, um sie in meinen Single Page Applications zu verwenden. Also habe ich gegoogelt und Github nach ein paar guten Beispielen für die Verwendung von CommonJS-Modulen gesucht - und habe noch immer keine gefunden, die im Detail erklärt, was die Hauptmuster sind und wie sie sich unterscheiden. Zum Beispiel sah aus wie diese eine Antwort, die ich vorgelegt:Muster von CommonJS-Modulen?

var HelloWorld = function() {}; 

HelloWorld.prototype.hello = function() { 
    return 'Hello, World!' 
}; 

module.exports = HelloWorld; 

Aber ein anderer sah aus wie dieses

var Bob = function() { 
    this.hey = function (input) { 
     input = input.split(''); 
     if (input.indexOf('!') >= 0) {return 'Whoa, chill out!'} 
     if (input.indexOf('?') >= 0) {return 'Sure.'}   
     return 'Whatever.' 
    }; 

} 

module.exports = Bob; 

Insbesondere Ich frage mich, was der Unterschied ist eine Funktion innerhalb der übergeordneten Definition zwischen nisten, wie getan mit der Bob-hey() - Funktion, im Gegensatz zu der Art, wie HelloWorld hallo() Prototyp stattdessen verwendet.

Antwort

2

Um mit den beiden Funktionen zu beginnen, die Sie als Beispiele angegeben haben, sind sie völlig unterschiedlich und haben unterschiedliche Zwecke.

Basierend auf dem Code, den Sie als Beispiel haben, ist die Art, wie Sie sie aufrufen, auch falsch.

Für Ihr Bob-Beispiel wird lediglich eine Funktion einer Variablen zugewiesen. Um es zu nennen, müssen Sie einfach Bob() tun. Wenn Sie eine Bob.hello() machen, erhalten Sie eine Fehlermeldung.

Die HelloWorld auf der anderen Seite ist nicht nur eine Funktion, gut .. Es ist, seit Sie es als eine leere Funktion deklariert haben, was es heißt, wenn Sie HelloWorld() tun. Wie auch immer Sie hello als Prototyp-Funktion definiert haben, damit Sie dies direkt aufrufen können, müssten Sie HelloWorld.prototype.hello() ausführen. Ich denke, dass diese hauptsächlich dazu verwendet werden, das Verhalten existierender Objekte oder Funktionen zu verändern.

Sie fragen, was die effizienteste Art ist, Module zu schreiben, aber in Wirklichkeit gibt es dafür keine richtige Antwort. Alles ein Modul ist ein Code, der exportiert und von anderen Dateien wiederverwendet werden kann. Sie können Funktionen, Objekte, einfache Variablen sein, was immer Sie möchten!

Also im Grunde kann man tun, alle diese:

// moduleThatExportsANumber.js 
module.exports = 1 

// moduleThatExportsAnObject.js 
module.exports = {} 

// moduleThatExportsAFunction.js 
module.exports = function() { return 'say somethign!'} 

// main.js Lets call all the modules! 
const number = require('./moduleThatExportsANumber) 
const object = require('./moduleThatExportsAnObject) 
const function = require('./moduleThatExportsAFunction) 

console.log(number) // 1 
console.log(object) // {} 
console.log(function) // function() { return 'say somethign!'} 
console.log(function()) //say somethign! 

Das Ganze über Module ist einfach Sachen in eine Datei zu schreiben, das Zeug zu exportieren, die im Falle von Commonjs durch module.exports = [whatever you are exporting] geschehen ist, und später importieren , die für CommonJS ist require('./filename')

Jetzt ... Gehen Sie zurück zu der ursprünglichen Sache, die gefragt wurde, Ihr Cheatsheet. Ich kenne leider keine CommonJS-Geräte, aber here ist ein anständiger Blogbeitrag über das CommonJS-Modulsystem und here ist ein JavaScript-Gerät, das Ihnen ebenfalls gefallen könnte.

+0

Entschuldigung der Bob.hello() war ein Tippfehler, das habe ich behoben! Ich bin neu beim Schreiben von Modulen, also habe ich nur die in den Demo-Dateien gefundenen Formate für Exercism.io benutzt - die hello() -Funktion wird in der Jasmine-Spezifikation verwendet, indem zuerst eine Instanz erstellt wird - var helloWorld = new HelloWorld(); - dann das eigentliche fn - halloWorld.hello() –