Laut dem Node.js-Handbuch:
Wenn Sie möchten, dass das Stammverzeichnis des Exports Ihres Moduls eine Funktion ist (z. B. ein Konstruktor), oder wenn Sie ein vollständiges Objekt in einer Zuweisung exportieren möchten, anstatt jeweils eine Eigenschaft zu erstellen, weisen Sie es module.exports anstelle von export zu .
Das gegebene Beispiel ist:
// file: square.js
module.exports = function(width) {
return {
area: function() {
return width * width;
}
};
}
und so verwendet:
var square = require('./square.js');
var mySquare = square(2);
console.log('The area of my square is ' + mySquare.area());
Meine Frage: Warum verwendet das Beispiel kein Quadrat als Objekt? Ist das Folgende gültig und macht es das Beispiel "objektorientierter"?
var Square = require('./square.js');
var mySquare = new Square(2);
console.log('The area of my square is ' + mySquare.area());
javascript
node.js
commonjs
Naresh
quelle
quelle
square
in existiertSquare
dasnew square()
nicht mehr.Antworten:
Mit CommonJS-Modulen können exportierte Eigenschaften auf zwei Arten definiert werden. In beiden Fällen geben Sie ein Objekt / eine Funktion zurück. Da Funktionen in JavaScript erstklassige Bürger sind, können sie sich wie Objekte verhalten (technisch gesehen sind sie Objekte). Ihre Frage zur Verwendung der
new
Schlüsselwörter hat jedoch eine einfache Antwort: Ja. Ich werde veranschaulichen ...Modulexporte
Sie können entweder die
exports
bereitgestellte Variable verwenden, um Eigenschaften daran anzuhängen. Sobald diese Zuweisungseigenschaften in einem anderen Modul erforderlich sind, werden sie verfügbar. Oder Sie können der Eigenschaft module.exports ein Objekt zuweisen. In beiden Fällenrequire()
wird ein Verweis auf den Wert von zurückgegebenmodule.exports
.Ein Pseudocode-Beispiel für die Definition eines Moduls:
Im obigen Beispiel
module.exports
undexports
sind das gleiche Objekt. Der coole Teil ist, dass Sie nichts davon in Ihren CommonJS-Modulen sehen, da das gesamte System sich darum kümmert. Alles, was Sie wissen müssen, ist, dass es ein Modulobjekt mit einer Exporteigenschaft und einer Exportvariablen gibt, die auf das zeigt das gleiche macht das module.exports.Mit Konstruktoren anfordern
Da Sie eine Funktion direkt anhängen können, können
module.exports
Sie im Wesentlichen eine Funktion zurückgeben und wie jede Funktion als Konstruktor verwalten. (Dies ist kursiv dargestellt, da der einzige Unterschied zwischen einer Funktion und einem Konstruktor in JavaScript darin besteht, wie Sie sie verwenden möchten. Technisch es gibt keinen Unterschied.)Folgendes ist also ein perfekter Code, und ich persönlich ermutige ihn:
Für Nichtkonstruktoren erforderlich
Gleiches gilt für nicht konstruktorähnliche Funktionen:
quelle
Meiner Meinung nach sind einige der Beispiele von node.j ziemlich erfunden.
Sie könnten erwarten, so etwas in der realen Welt zu sehen
Verwendung
Für die ES6-Leute
Verwenden Sie es in ES6
Wenn Sie eine Klasse verwenden, müssen Sie das
new
Schlüsselwort verwenden, um sie zu instanziieren. Alles andere bleibt gleich.quelle
new
oder nicht. Aber ist das nur so, weil Sie diesen Scheck habenthis instanceof square
? Wenn ja, was genau macht dieser Mechanismus?import
undexport
definiert? Dies sind reservierte Schlüsselwörter in ECMAScript 6 (ES6). Vor ES6 musste man Bibliotheken verwenden, um Module zu verwalten. Die Modulation des Knotens ist den Modulen der CommonJS-Bibliothek nachempfunden. Was ist dasdefault
inexport default Square
? Dies gibt an, was importiert werden soll, wenn Sie nur die 'Datei' importieren und nicht andere, spezifische Exporte aus dieser Datei. Solange sie existieren, fand ich diese Seiten hilfreich: spring.io/understanding/javascript-modules und exploringjs.com/es6/ch_modules.htmlDiese Frage hat eigentlich nichts damit zu tun, wie es
require()
funktioniert. Grundsätzlich wird alles, was Siemodule.exports
in Ihrem Modul eingestellt haben, vomrequire()
Aufruf zurückgesendet.Dies wäre gleichbedeutend mit:
new
Beim Aufrufen ist das Schlüsselwort nicht erforderlichsquare
. Sie geben nicht die Funktionsinstanz selbst zurücksquare
, sondern am Ende ein neues Objekt. Daher können Sie diese Funktion einfach direkt aufrufen.Weitere Informationen zu komplizierten Argumenten
new
finden Sie hier: Wird das "neue" Schlüsselwort von JavaScript als schädlich eingestuft?quelle
new
damit andere dort am Krieg gegen sie teilnehmen können.Der Beispielcode lautet:
in der Hauptsache
Die Verwendung der folgenden kann funktionieren
quelle
Am Ende geht es bei Node um Javascript. JS hat mehrere Möglichkeiten, etwas zu erreichen. Es ist dasselbe, einen "Konstruktor" zu erhalten. Wichtig ist, eine Funktion zurückzugeben .
Auf diese Weise erstellen Sie tatsächlich eine neue Funktion, wie wir sie beispielsweise mit JS in einer Webbrowser-Umgebung erstellt haben.
Persönlich bevorzuge ich den Prototyp-Ansatz, wie Sukima in diesem Beitrag vorgeschlagen hat: Node.js - Verwendung von module.exports als Konstruktor
quelle