Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Exporte in js

Detaillierte Erläuterung der Exporte in js

小云云
小云云Original
2018-03-31 16:36:5424620Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die detaillierte Erklärung des Exports in js mit, hauptsächlich in Form von Code. Ich hoffe, dass er allen helfen kann.

Verwandte Videoempfehlungen: 1.JavaScript Quick Start_Jade Girl Heart Sutra Series
Verwandte manuelle Empfehlungen: 1.JavaScript Chinesisches Referenzhandbuch

Schreiben 1

exports.hello = function(){
    console.log(‘world’);
}

Schreiben 2

var f = {
    hello : function(){
        console.log(‘world’);
    }
}
module.exports = f;

Angenommen, der Dateiname des von uns geschriebenen Moduls lautet hello.js, führen Sie den folgenden Code aus

var h = require(‘hello’);
h.hello();

Für die beiden oben genannten Schreibmethoden ist das Ergebnis nach der Ausführung dieses Codes dasselbe.

module.exports:

Zum Beispiel:

1,

//a.js
module.exports = ['aaa',18]
//b.js
var a= require('a')console.log(a[1]) //输出18

2,

//a.js
module.exports =function(){
this.show=function(){
console.log('hahah~');
}
}
//b.js
var a= require('a');
var obj = new a();obj .show();//输出hahah~
module.exports

Mein Verständnis ist: Sie weisen module.exports etwas zu und Sie erhalten etwas, nachdem require

exports : 

//a.js
exports.show =function(){
console.log('hahah~');
}
//b.js
var a= require('a');
a.show();//输出hahah~

exports bereits ein Objekt ist. Sie können diesem Objekt Attribute hinzufügen , und nach „require“ erhalten Sie das Exportobjekt.

Aber Sie können Exporten kein neues Objekt zuweisen, wie z. B. exports={}

Es ist auch zu beachten, dass alle Exportoperationen ungültig sind, wenn module.exports bereits über Inhalte verfügt . Denken Sie daran

Lassen Sie uns noch einmal über den Prototyp sprechen. Er dient dazu, dem Prototyp Attribute hinzuzufügen. Lassen Sie mich Ihnen ein weiteres Beispiel geben.

//a.js
module.exports =function(){
}
module.exports.prototype.show = function(){
console.log('hahah~');
}
//b.js
var a= require('a');
var obj = new a()
obj.show()//输出hahah~
Lassen Sie uns abschließend über Klassenmethoden sprechen. Wenn es um Klassen geht, müssen module.exports verwendet werden.

Kastanien sind hier

1. Jede node.js-Ausführungsdatei erstellt automatisch ein Modulobjekt erstellt Ein Attribut namens exports, der initialisierte Wert ist {}


Da ich das sehe, glaube ich, dass jeder die Antwort gesehen hat: exports bezieht sich auf den Wert von module.exports.
//a.js
module.exports =function(){
}
module.exports.show = function(){
console.log('hahah~');
}
//b.js
var a= require('a');
a.show()//输出hahah~
##module.exports与exports的区别

Wenn module.exports geändert wird, werden die Exporte nicht geändert, und wenn das Modul exportiert wird, ist die tatsächlich exportierte Ausführung module.exports, nicht exports

module.exports = {};
Node.js为了方便地导出功能函数,node.js会自动地实现以下这个语句
foo.js
exports.a = function(){
console.log('a')
}
exports.a = 1 
test.js
var x = require('./foo');
console.log(x.a)
Sehen Sie sich das folgende Beispiel an

Exporte werden ungültig, nachdem module.exports geändert wurde.

Fühlen Sie sich ein wenig aufgeklärt? Hier sind einige häufig vorkommende Verwendungsmethoden in Open-Source-Modulen.

foo.js
exports.a = function(){
 console.log('a')
}
module.exports = {a: 2}
exports.a = 1 
test.js
var x = require('./foo');
console.log(x.a)
result:
2
Es gibt ein Sprichwort in JavaScript, dass Funktion ein Objekt ist, Ansicht ein Objekt ist, module.export =View, was dem Exportieren des gesamten Ansichtsobjekts entspricht.


Wenn ein externes Modul es aufruft, kann es alle Methoden von View aufrufen. Es ist jedoch zu beachten, dass nur statische Methoden von View aufgerufen werden können. Vom Prototyp erstellte Methoden sind private Methoden von View.

##module.exports = View
function View(name, options) { 
  options = options || {};
  this.name = name;
  this.root = options.root;
  var engines = options.engines;
  this.defaultEngine = options.defaultEngine;
  var ext = this.ext = extname(name);
  if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no         extension was provided.');
  if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') +     this.defaultEngine);
  this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express);
  this.path = this.lookup(name);
}
module.exports = View;

Wenn wir das Prinzip verstehen, ist es nicht schwer zu verstehen, dass diese Schreibweise etwas überflüssig ist. Tatsächlich dient sie dazu, sicherzustellen, dass die Initialisierungsumgebung des Modul ist sauber. Gleichzeitig ist es für uns auch praktisch, auch nach dem Ändern des Objekts, auf das module.exports verweist, die Eigenschaften von exports


foo.js
function View(){
}
View.prototype.test = function(){
 console.log('test')
}
View.test1 = function(){
 console.log('test1')
}
module.exports = View
test.js
var x = require('./foo');
console.log(x) //{ [Function: View] test1: [Function] }
console.log(x.test) //undefined
console.log(x.test1) //[Function]
x.test1() //test1
##var app = exports = module.exports = {};
beispielsweise in welchem ​​Modul verwenden zu können. exports = createApplication ändert module.exports, let Exports ist ungültig. Verwenden Sie exports = module.exports, um seine ursprünglichen Eigenschaften wiederherzustellen.


##exports.init= function(){}

exports = module.exports = createApplication;
/**
 * Expose mime.
 */
exports.mime = connect.mime;
Dies ist die einfachste und direkt exportierte Modul-Init-Methode.

##var mongoose = module.exports = exports = new Mongoose;

Es hat mehrere Funktionen in einer, aber basierend auf der obigen Beschreibung sollten Sie keine Antwort bekommen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Exporte in js. 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