2016-01-02 130 views
0

我目前正在閱讀關於模塊的節點文檔並且遇到了這段代碼。節點 - 工廠還是構造函數,還是兩者都不?

該文檔說,以下是導出構造函數 - 但沒有New關鍵字來實例化對象。作爲初學者,這讓我有點困惑。它是一個構造函數嗎?

如果是這樣,爲什麼沒有新的關鍵字?提前致謝。

//CODE USING MODULE 

var square = require('./square.js'); 
var mySquare = square(2); 
console.log('The area of my square is ' + mySquare.area()); 

// THE MODULE 
// assigning to exports will not modify module, must use  module.exports 

module.exports = function(width) { 
    return { 
    area: function() { 
    return width * width; 
    } 
    }; 
} 

回答

1

我覺得在這個例子中,作者只是指從模塊中導出頂層函數的模式。當你需要模塊時你必須調用這個函數。此頂層函數將閉包中的值傳遞給它返回的任何函數。

如果你寫像這樣調用代碼可能是清晰的:

var square = require('./square.js')(2); 
square.area(); 

比較這對當模塊不返回頂級功能的情況。區域功能需要通過寬度參數:

var square = require('./square.js'); 
square.area(2); 

該示例有點麻煩。模塊中的每個函數都可以訪問width變量。大不了。但想象一下,像數據庫連接一樣傳遞。您可以看到該模式在面向對象的語言中完成了與構造函數大致相同的事情,或者實際上您使用new關鍵字構造javascript對象的方式。

+0

謝謝。現在對我更有意義。 –

相關問題