exports module.exports

commonjs可以

1.可以把文件加載成模塊

2.提供了module.exports ?exports 解決了public private

所以nodejs才能處理后端

module.exports 把一個類 暴露給外部 要在外面new一下 才能調用

exports返回的永遠是一個對象

module.exports可以返回很多(方法 數組 對象)

一個簡單的例子,計算圓的面積:

使用 exports

app.js

```

var circle = require('./circle');

console.log(circle.area(4));

circle.js

exports.area = function(r) {

return r * r * Math.PI;

}

```

這種方法是把對象暴露給外部 之后對象.屬性去調用area函數

使用 module.exports

app.js

```

var area = require('./area');

console.log(area(4));

area.js

module.exports = function(r) {

return r * r * Math.PI;


}

```

這種是將整個類暴露給外部 new之后 直接就可以訪問

exports和module.exports的區(qū)別

exports是module.exports的一個引用;module.exportsd的初始值是一個空對象

所以exports的初始值也是一個空對象

require返回的是module.exports

上面兩個例子輸出是一樣的。你也許會問,為什么不這樣寫呢?

app.js

```

var area = require('./area');

?console.log(area(4));

area.js

?exports = function(r) {

? ?return r * r * Math.PI;

?}

```

運行上面的例子會報錯。這是因為,前面的例子中通過給 exports 添加屬性,只是對 exports 指向的內存做了修改,而

? ```

exports = function(r) {

? ?return r * r * Math.PI;

?}

```

其實是對 exports 進行了覆蓋,exports 指向了一塊新的內存(內容為一個計算圓面積的函數),exports 和 module.exports 不再指向同一塊內存,此時 exports 和 module.exports 毫無聯(lián)系, module.exports 指向的那塊內存并沒有做任何改變,仍然為一個空對象 {} , area.js 導出了一個空對象,所以我們在 app.js 中調用 area(4) 會報 TypeError: object is not a function 的錯誤。

所以,一句話做個總結:當我們想讓模塊導出的是一個對象時, exports 和 module.exports 均可使用(但 exports 也不能重新覆蓋為一個新的對象),而當我們想導出非對象接口時,就必須也只能覆蓋 module.exports 。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容