您無法訪問乘法函數,因爲javascript對象是通過引用傳遞的。當您使用line module.exports = {blah}時,您將創建一個新對象{blah}並將module.exports設置爲指向它。但是,出口仍然指向舊對象。
最初,module.exports和exports指向同一個空對象。 因此,exports = {},module.exports = {}。但是當你創建一個新的對象,並有module.exports指向它,例如:
module.exports = {
sum : function(a,b){
return a+b;
}
};
module.exports將指向新的對象,但出口仍然在舊的對象指向:
// exports will still point to the old object
console.log(exports) // prints {}
console.log(module.exports) // prints { sum: function() }
然後:
console.log(exports) // prints {}
exports.multiply = function(a,b){
return a*b;
};
console.log(exports) // prints { multiply: function() }
當你導入模塊,將返回在module.exports的價值,所以你不會有機會獲得多重功能,因爲這是在出口的定義,它引用各色一nt對象。
如果你不想擔心這個問題,你可以這樣做:
exports = module.exports = {
sum : function(a,b){
return a+b;
}
};
這會讓他們引用同一個對象。因此,
exports.multiply = function(a,b){
return a*b;
};
將正常工作。
但據此,var exports = module.exports,不是出口,module.exports指向同一個對象。 –
在代碼的第一行代碼段,我們將包含sum = function(){...}的對象分配給「exports」和「module.exports」。那麼我們將另一個函數(乘法)作爲屬性添加到同一個對象。 – tashakori
測試用例:將上面的代碼保存爲m.js然後在另一個文件中寫入: var m = require(「./m.js」) console.log(m.sum(1,2)) console .log(m.multiply(1,2)) 它會按預期工作。 – tashakori