Heim > Artikel > Web-Frontend > Detaillierte Erklärung des Unterschieds zwischen Exports und module.exports in SeaJs
Dieser Artikel stellt hauptsächlich den Unterschied zwischen Exports und module.exports vor, basierend auf den Erfahrungen mit der Verwendung von SeaJs. Er analysiert die spezifischen Funktionen, Verwendungsmethoden und zugehörigen Vorsichtsmaßnahmen für den Betrieb von Exports und module.exports in Form von Beispielen kann darauf verweisen
Das Beispiel in diesem Artikel beschreibt den Unterschied zwischen Exports und module.exports basierend auf der Erfahrung mit der Verwendung von SeaJs. Teilen Sie es als Referenz mit allen:
1. Exports ist das Hilfsobjekt von module.exports. Wenn Exports eine API für die Außenwelt bereitstellt, müssen Sie Return verwenden, um die Exporte zurückzugeben Objekt
2. module.exports auch Die API
kann direkt der Außenwelt zur Verfügung gestellt werden: https://github.com/seajs/seajs/issues/242
Exports-Objekt
Exports ist ein Objekt, das zur Bereitstellung von Modulschnittstellen zur Außenwelt verwendet wird.
define(function(require, exports) { // 对外提供 foo 属性 exports.foo = 'bar'; // 对外提供 doSomething 方法 exports.doSomething = function() {}; });
Neben dem Hinzufügen von Mitgliedern zum Exports-Objekt können Sie mit return auch direkt Schnittstellen zur Außenwelt bereitstellen.
define(function(require) { // 通过 return 直接提供接口 return { foo: 'bar', doSomething: function() {} }; });
Wenn die Return-Anweisung der einzige Code im Modul ist, kann sie auch vereinfacht werden zu:
define({ foo: 'bar', doSomething: function() {} });
Das obige Format eignet sich besonders zur Definition von JSONP-Modulen.
Besonderer Hinweis: Die folgende Schreibweise ist falsch!
define(function(require, exports) { // 错误用法!!! exports = { foo: 'bar', doSomething: function() {} }; });
Die richtige Art, es zu schreiben, besteht darin, return zu verwenden oder module.exports einen Wert zuzuweisen:
define(function(require, exports, module) { // 正确写法 module.exports = { foo: 'bar', doSomething: function() {} }; });
Tipp: exports ist nur eine Referenz auf module.exports. Wenn Exporte innerhalb der Fabrik neu zugewiesen werden, wird der Wert von module.exports nicht geändert. Daher ist die Zuweisung eines Werts zu Exports ungültig und kann nicht zum Ändern der Modulschnittstelle verwendet werden.
module.exports Object
Die vom aktuellen Modul bereitgestellte Schnittstelle.
Der an den Factory-Konstruktor übergebene Exportparameter ist ein Verweis auf das module.exports-Objekt. Die Bereitstellung von Schnittstellen nur über den Exportparameter kann manchmal nicht alle Anforderungen von Entwicklern erfüllen. Wenn die Schnittstelle eines Moduls beispielsweise eine Instanz einer bestimmten Klasse ist, muss sie über module.exports implementiert werden:
define(function(require, exports, module) { // exports 是 module.exports 的一个引用 console.log(module.exports === exports); // true // 重新给 module.exports 赋值 module.exports = new SomeClass(); // exports 不再等于 module.exports console.log(module.exports === exports); // false });
Hinweis: Zuweisung an module.exports Es muss synchron ausgeführt werden und kann nicht in der Rückruffunktion platziert werden. Folgendes funktioniert nicht:
// x.jsdefine(function(require, exports, module) { // 错误用法 setTimeout(function() { module.exports = { a: "hello" }; }, 0); });
In y.js gibt es einen Aufruf zu den oben genannten x.js:
// y.jsdefine(function(require, exports, module) { var x = require('./x'); // 无法立刻得到模块 x 的属性 a console.log(x.a); // undefined });
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen Exports und module.exports in SeaJs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!