node.js - nodejs exports module.exports
巴扎黑
巴扎黑 2017-04-17 15:30:40
0
1
573

nodejs 中经常会看到这样的代码
exports = module.exports = {}
请问 为什么要让 exports = module.exports 呢? 这样做有什么作用呢? 谢谢!!!

巴扎黑
巴扎黑

全部回覆(1)
PHPzhong

讓這個模組更純粹的寫法。
module.exports是require()方法調用模組的接口,而exports可以給模組添加更多的方法,而exports返回的是一個實例化對象,指向module.exports
比如對於一個構造函數來說:
Person.js

var Person = function() {
    this.name = 'Samuel';
}

//通过module.exports
module.exports = Person;//这里将Person作为模块暴露的接口,传递给require(),使其返回这个Person
exports.one = 'Shervesi';//这里给Person添加了一个属性,那么通过require()返回的模块也会拥有这个方法

Use.js

var P = require('./Person');
console.log(P.name);//'Samuel'
console.log(P.one);//'Shervesi',这个属性是Person所不具有的

因此可以將exports理解為給模組進行最後修飾的方法;
而module.exports則負責暴露一個接口供require()方法調用,若module.exports沒有被聲明指向,那它就默認的導出exports所指向的對象,如這樣一個場景:
Person.js

var Person = function() {
    this.name = 'Samuel';
}
module.exports = 'I am a string';//module.exports被声明指向了一个字符串
exports.one = 'Shervesi';

User.js

var P = require('./Person.js');
console.log(P);//'I am a string'  //这是module.exports所提供的接口指向的
console.log(P.one);//这里会出现类型错误,因为负责暴露接口的module.exports已经导出了一个字符串,即是一个常量,因此不能携带one属性,exports所修饰的one属性被‘干掉’。

總結:

  • module.exports是模組導出的仲裁,它決定到底導出一個什麼東西,本質上就是提供給require()方法的一個回傳值,因此它可以是任何js基本類型(包括null);

  • exports是給導出模組進行修飾的輔助方法,但受module.exports的仲裁,決定模組是否能具有這個屬性。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板