nodejs中exports與module.exports的區別

來源:互聯網
上載者:User

標籤:ant   eth   archive   border   exp   method   結果   wrap   stc   

[原文] 

你肯定非常熟悉nodejs模組中的exports對象,你可以用它建立你的模組。例如:(假設這是rocker.js檔案)

exports.name = function() {    console.log(‘My name is Lemmy Kilmister‘);};

在另一個檔案中你這樣引用

var rocker = require(‘./rocker.js‘);rocker.name(); // ‘My name is Lemmy Kilmister‘

那到底Module.exports是什麼呢?它是否合法呢?

其實,Module.exports才是真正的介面,exports只不過是它的一個協助工具輔助。 最終返回給調用的是Module.exports而不是exports。

所有的exports收集到的屬性和方法,都賦值給了Module.exports。當然,這有個前提,就是Module.exports本身不具備任何屬性和方法。如果,Module.exports已經具備一些屬性和方法,那麼exports收集來的資訊將被忽略。

修改rocker.js如下:

module.exports = ‘ROCK IT!‘;exports.name = function() {    console.log(‘My name is Lemmy Kilmister‘);};

 再次引用執行rocker.js

var rocker = require(‘./rocker.js‘);rocker.name(); // TypeError: Object ROCK IT! has no method ‘name‘

發現報錯:對象“ROCK IT!”沒有name方法

rocker模組忽略了exports收集的name方法,返回了一個字串“ROCK IT!”。由此可知,你的模組並不一定非得返回“執行個體化對象”。你的模組可以是任何合法的javascript對象--boolean, number, date, JSON, string, function, array等等。

你的模組可以是任何你設定給它的東西。如果你沒有顯式的給Module.exports設定任何屬性和方法,那麼你的模組就是exports設定給Module.exports的屬性。

下面例子中,你的模組是一個類:

module.exports = function(name, age) {    this.name = name;    this.age = age;    this.about = function() {        console.log(this.name +‘ is ‘+ this.age +‘ years old‘);    };};

可以這樣應用它:

var Rocker = require(‘./rocker.js‘);var r = new Rocker(‘Ozzy‘, 62);r.about(); // Ozzy is 62 years old

下面例子中,你的模組是一個數組:

module.exports = [‘Lemmy Kilmister‘, ‘Ozzy Osbourne‘, ‘Ronnie James Dio‘, ‘Steven Tyler‘, ‘Mick Jagger‘];

可以這樣應用它:

var rocker = require(‘./rocker.js‘);console.log(‘Rockin in heaven: ‘ + rocker[2]); //Rockin in heaven: Ronnie James Dio

現在你明白了,如果你想你的模組是一個特定的類型就用Module.exports。如果你想的模組是一個典型的“執行個體化對象”就用exports

給Module.exports添加屬性類似於給exports添加屬性。例如:

module.exports.name = function() {    console.log(‘My name is Lemmy Kilmister‘);};

同樣,exports是這樣的

exports.name = function() {    console.log(‘My name is Lemmy Kilmister‘);};

請注意,這兩種結果並不想同。前面已經提到module.exports是真正的介面,exports只不過是它的協助工具輔助。推薦使用exports匯出,除非你打算從原來的“執行個體化對象”改變成一個類型。


分類: javascript,nodejs標籤: nodejs

nodejs中exports與module.exports的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.