Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung des Unterschieds zwischen Exports und module.exports in SeaJs

Detaillierte Erklärung des Unterschieds zwischen Exports und module.exports in SeaJs

黄舟
黄舟Original
2017-10-14 10:13:031667Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn