Moduły CommonJS pozwalają na dwa sposoby definiowania eksportowanych właściwości. W obu przypadkach zwracasz obiekt / funkcję. Ponieważ funkcje są obywatelami pierwszej klasy w JavaScript, mogą zachowywać się jak obiekty (technicznie rzecz biorąc, są to obiekty). To mówi twoje pytanie dotyczące używanianew
słów kluczowych ma prostą odpowiedź: Tak. Zilustruję ...
Eksport modułów
Możesz użyć exports
podanej zmiennej, aby dołączyć do niej właściwości. Gdy będą wymagane w innym module, te przypisane właściwości stają się dostępne. Lub możesz przypisać obiekt do właściwości module.exports. W obu przypadkach to, co jest zwracane przez, require()
jest odniesieniem do wartościmodule.exports
.
Przykład pseudokodu pokazujący, jak zdefiniowano moduł:
var theModule = {
exports: {}
};
(function(module, exports, require) {
// Your module code goes here
})(theModule, theModule.exports, theRequireFunction);
W powyższym przykładzie module.exports
iexports
są tym samym obiektem. Fajne jest to, że nie widzisz nic z tego w swoich modułach CommonJS, ponieważ cały system dba o to za Ciebie.Wszystko, co musisz wiedzieć, jest to, że istnieje obiekt modułu z właściwością eksportu i zmienną eksportu, która wskazuje na to samo robi module.exports.
Wymagaj z konstruktorami
Ponieważ możesz dołączyć funkcję bezpośrednio do module.exports
, możesz w zasadzie zwrócić funkcję i jak każda funkcja może być zarządzana jako konstruktor (to jest napisane kursywą, ponieważ jedyną różnicą między funkcją a konstruktorem w JavaScript jest sposób jej użycia. nie ma różnicy.)
A więc poniższy kod jest bardzo dobry i osobiście do tego zachęcam:
// My module
function MyObject(bar) {
this.bar = bar;
}
MyObject.prototype.foo = function foo() {
console.log(this.bar);
};
module.exports = MyObject;
// In another module:
var MyObjectOrSomeCleverName = require("./my_object.js");
var my_obj_instance = new MyObjectOrSomeCleverName("foobar");
my_obj_instance.foo(); // => "foobar"
Wymagaj dla nie-konstruktorów
To samo dotyczy funkcji niebędących konstruktorami:
// My Module
exports.someFunction = function someFunction(msg) {
console.log(msg);
}
// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"
square
na już nie istnieje.Square
new square()