English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
require viene utilizzato per caricare il codice, mentre exports e module.exports vengono utilizzati per esportare il codice. Ma molti principianti possono essere confusi dalla differenza tra exports e module.exports, per una migliore comprensione della relazione tra exports e module.exports, prima di tutto dobbiamo consolidare le basi di js. Esempio:
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);
Esegui il risultato di app.js è:
{ name: 'nswbmw 1' } { name: 'nswbmw 1' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 3' }
Spiegazione:a è un oggetto, b è un riferimento a a, cioè a e b puntano allo stesso oggetto, cioè a e b puntano allo stesso indirizzo di memoria, quindi le prime due uscite sono le stesse. Quando si modifica b, ossia il contenuto dell'indirizzo di memoria a e b è cambiato, quindi a也会有体现,所以第三、四个输出一样。Quando b viene sovrascritto completamente, b punta a un nuovo indirizzo di memoria (non ha modificato il blocco di memoria originale), a ancora punta al blocco di memoria originale, cioè a e b non puntano più allo stesso blocco di memoria, ossia a e b non hanno più nulla a che fare, quindi le ultime due uscite sono diverse.
Dopo aver capito gli esempi sopra, entriamo nel tema principale.
Per sapere la differenza tra exports e module.exports, dobbiamo sapere solo tre punti:
Quindi: passiamo attraverso
var name = 'nswbmw'; exports.name = name; exports.sayName = function() { console.log(name); {}
Assegnare un valore a exports è come aggiungere due proprietà all'oggetto vuoto module.exports, il codice sopra è equivalente a:
var name = 'nswbmw'; module.exports.name = name; module.exports.sayName = function() { console.log(name); {}
Di solito utilizziamo exports e module.exports in questo modo
Un esempio semplice per calcolare l'area di un cerchio:
Utilizzo di exports
app.js
var circle = require('./circle'); console.log(circle.area(4));
circle.js
exports.area = function(r) { return r * r * Math.PI; {}
Utilizzo di module.exports
app.js
var area = require('./area'); console.log(area(4));
area.js
module.exports = function(r) { return r * r * Math.PI; {}
I due esempi sopra riportati generano lo stesso output. Potresti chiederti, perché non si scrive così?
app.js
var area = require('./area'); console.log(area(4));
area.js
exports = function(r) { return r * r * Math.PI; {}
Eseguire l'esempio sopra riportato genererà un errore. Questo è perché, nell'esempio precedente, aggiungendo attributi a exports, abbiamo solo modificato la memoria a cui punta exports, ma
exports = function(r) { return r * r * Math.PI; {}
In realtà si tratta di una sovrascrittura di exports, il che significa che exports puntano a una nuova memoria (contenente una funzione di calcolo dell'area del cerchio), il che significa che exports e module.exports non puntano più alla stessa memoria, il che significa che al momento exports e module.exports non hanno alcun legame, il che significa che la memoria a cui punta module.exports non è stata modificata in alcun modo e rimane un oggetto vuoto {} , il che significa che area.js ha esportato un oggetto vuoto, quindi quando chiamiamo area(4) in app.js, viene generato l'errore TypeError: object is not a function.
Quindi, in una parola, riassumiamo: quando vogliamo che il modulo esporti un oggetto, sia exports che module.exports possono essere utilizzati (ma exports non può essere sovrascritto come un nuovo oggetto), mentre quando vogliamo esportare un'interfaccia non oggetto, è necessario e sufficiente sovrascrivere module.exports.
Spesso vediamo questo tipo di scrittura:
exports = module.exports = somethings;
Il codice sopra è equivalente a
module.exports = somethings; exports = module.exports;
La ragione è anche molto semplice, module.exports = somethings è una sovrascrittura di module.exports, in questo momento il rapporto tra module.exports e exports è rotto, module.exports punta a un nuovo blocco di memoria, mentre exports punta ancora al blocco di memoria originale. Per far sì che module.exports e exports puntino ancora allo stesso blocco di memoria o a uno stesso “oggetto”, quindi exports = module.exports.
Questo è tutto il contenuto dell'articolo, spero che il contenuto di questo articolo possa aiutarti a imparare o lavorare meglio, e spero anche di ricevere più supporto per il tutorial di urla!
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright spetta agli autori originali, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.