node.js 學習筆記之 module.exports與exports

在nodejs模塊中,若是但願向外暴露出模塊中的方法和變量,須要使用module.exports或者exports,可是他們的意義卻不一樣。javascript

  • module.exports

module表示該模塊對象,在module對象中有個exports的屬性,默認值爲空對象{};exports是模塊往外暴露方法或者變量的接口,能夠暴露變量或者方法:java

javascriptvar a =  10;
module.exports = a;
javascriptvar a =  10;
var b = 'hello';
module.exports = {age:a,name:b};
javascriptvar a =  {
    name : 'hello',
    age: 10
}
module.exports = a;
javascriptfunction a(){
    console.log('hello')
}
module.exports = a;
javascriptvar a = function (){
    console.log('hello')
}
module.exports = a;
javascriptvar a = {
    name : 'hello',
    getName : function(){
        console.log(this.name)
    }
}
module.exports = a;
  • exports

exports是module.exports的一個引用,能夠爲exports添加屬性,但不能直接賦值,那樣就會失去對module.exports的引用,便不會暴露出所的值。node

javascriptexports.name = 'hello';
javascriptexports.getName = function(){
    console.log(this.name)
}

由於是module.exports的引用,因此每次爲exports賦值的時候,就是爲module.exports賦值。
若是直接爲exports賦值:this

javascriptexports = 'hello';

即改變了exports對module.exports的引用,因此所賦的值沒法經過module.exports暴露出去。code

  • exports = module.exports = xxx

能夠在不少項目中看到這句,當模塊要輸出一個非Object時(好比一個Function),可使用對象

javascriptmodule.exports = function () {}

此時 module.exports 被覆蓋了,而 exports 仍是原來的對像的引用,爲了不在後面的代碼中仍然使用 exports.xx = yy 而致使不能正確輸出,須要把 exports 變量也從新設置爲新的 module.exports 的引用,因此通常習慣寫成接口

javascriptexports = module.exports = xxx
相關文章
相關標籤/搜索