English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
require wird verwendet, um Code zu laden, während exports und module.exports verwendet werden, um Code zu exportieren. Viele Anfänger könnten jedoch verwirrt über die Unterschiede zwischen exports und module.exports sein, um das Verhältnis zwischen exports und module.exports besser zu verstehen, sollten wir zunächst die Grundlagen von js festigen. Beispiel:
app.js
var a = {name: 'nswbmw 1}; var b = a; console.log(a); console.log(b); b.name = 'nswbmw 2; console.log(a); console.log(b); var b = {name: 'nswbmw 3}; console.log(a); console.log(b);
Das Ergebnis des Laufens von app.js ist:
{ name: 'nswbmw 1} { name: 'nswbmw 1} { name: 'nswbmw 2} { name: 'nswbmw 2} { name: 'nswbmw 2} { name: 'nswbmw 3}
Erklärung:a ist ein Objekt, b ist ein Zeiger auf a, das bedeutet, dass a und b auf das gleiche Objekt verweisen, das bedeutet, dass a und b auf denselben Speicherbereich verweisen, daher sind die ersten beiden Ausgaben gleich. Wenn man b ändert, bedeutet das, dass sich der Inhalt des Speicherbereichs, auf den a und b verweisen, ändert, daher zeigt a dies ebenfalls an, daher sind die dritten und vierten Ausgaben gleich. Wenn man b vollständig überschreibt, verweist b auf einen neuen Speicherbereich (es wurde der ursprüngliche Speicherbereich nicht geändert), a verweist immer noch auf den ursprünglichen Speicherbereich, das bedeutet, dass a und b nicht mehr auf denselben Speicherbereich verweisen, das bedeutet, dass a und b zu diesem Zeitpunkt keine Beziehung mehr haben, daher sind die letzten beiden Ausgaben unterschiedlich.
Nachdem wir die obigen Beispiele verstanden haben, kommen wir zum Hauptthema.
Wir müssen nur drei Punkte verstehen, um die Unterschiede zwischen "exports" und "module.exports" zu kennen:
Daher: Wir
var name = 'nswbmw'; exports.name = name; exports.sayName = function() { console.log(name); }
Das Zuweisen eines Wertes an exports bedeutet, dass zwei Eigenschaften an den leeren Objekt module.exports hinzugefügt werden, der obige Code entspricht daher:
var name = 'nswbmw'; module.exports.name = name; module.exports.sayName = function() { console.log(name); }
Wir verwenden exports und module.exports in der Regel so
Ein einfaches Beispiel zur Berechnung des Flächeninhalts eines Kreises:
Verwendung von exports
app.js
var circle = require('./circle'); console.log(circle.area(4))
circle.js
exports.area = function(r) { return r * r * Math.PI; }
Verwendung von module.exports
app.js
var area = require('./area'); console.log(area(4))
area.js
module.exports = function(r) { return r * r * Math.PI; }
Die Ausgaben der beiden obigen Beispiele sind gleich. Vielleicht fragen Sie sich, warum man nicht so schreibt?
app.js
var area = require('./area'); console.log(area(4))
area.js
exports = function(r) { return r * r * Math.PI; }
Wenn Sie den obigen Beispiel ausführen, wird ein Fehler gemeldet. Dies liegt daran, dass in den vorangegangenen Beispielen durch das Hinzufügen von Eigenschaften an exports nur der Speicher, auf den exports verweist, geändert wurde, und
exports = function(r) { return r * r * Math.PI; }
Das bedeutet, dass exports eine neue Speicherregion (inhaltlich eine Funktion zur Berechnung des Flächeninhalts eines Kreises) zugewiesen hat, d.h. exports und module.exports verweisen nicht mehr auf denselben Speicher, d.h. zu diesem Zeitpunkt haben exports und module.exports keine Verbindung mehr zueinander, d.h. die Speicherregion, auf die module.exports verweist, wurde nicht verändert und bleibt ein leerer Objekt, d.h. area.js exportiert einen leeren Objekt, daher wird im app.js auf area zugegriffen(4Es wird ein Fehler TypeError: object is not a function gemeldet.
Also, um kurz zusammenzufassen: Wenn wir möchten, dass ein Modul ein Objekt exportiert, können wir sowohl exports als auch module.exports verwenden (aber exports kann nicht in ein neues Objekt überschrieben werden), und wenn wir einen nicht-objektorientierten Interface exportieren möchten, müssen wir unbedingt module.exports überschreiben.}
Wir sehen oft solche Schreibweisen:
exports = module.exports = somethings;
Der obige Code ist äquivalent zu
module.exports = somethings; exports = module.exports;
Der Grund ist auch sehr einfach: module.exports = somethings überschreibt module.exports. In diesem Fall ist die Beziehung zwischen module.exports und exports unterbrochen, module.exports verweist auf einen neuen Speicherblock, während exports immer noch auf den alten Speicherblock verweist. Um sicherzustellen, dass module.exports und exports immer noch auf den gleichen Speicherblock oder das gleiche "Objekt" verweisen, schreiben wir exports = module.exports.
Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass dieser Artikel Ihnen bei Ihrem Lernen oder Ihrer Arbeit hilft und wir hoffen, dass Sie die呐喊教程大力支持!
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte finden, die möglicherweise urheberrechtlich geschützt sind, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Bei nachgewiesener Täuschung wird diese Website den涉嫌侵权的内 容立即删除。)