2012-03-16 47 views
0

對於稍微成型的想法抱有歉意,但是在開始使用Node.js時,我確定我在某處讀到,因爲模塊是對象,this.myFunc對模塊內exports.myFunc等公共訪問的屬性同樣適用,如下所示:在Node.js模塊中使用「exports」和「this」有什麼區別?

app.js

var test = require('./modtest'); 
console.log(test.foo()); 
console.log(test.bar()); 

modtest.js

this.foo = function() { return "abc" } 
exports.bar = function() { return "xyz" } 

除了做「正確的事情」,爲什麼我應該使用exports對象?

回答

1

this等於全局的exports對象。這意味着如果文件中的某個函數使用不同的上下文執行,則this將停止引用exports對象,而是引用該新的上下文。這發生在這兩個例子:

// here, this == exports 

function foo() { 
    console.log(this); 
    console.log(exports); 
} 

foo();   // prints out the same object twice 
obj = { foo: foo }; 
obj.foo();  // prints out 'obj', then the 'exports' object 
foo.call(obj); // prints out 'obj' then 'exports' again 

這種方式,它是「安全」的使用exports,除非你確定this決不會與另一個上下文被重寫。

同樣,exports可能被代碼中的某個局部變量覆蓋,但更容易避免這種類型的錯誤。

0

導出對象解析範圍,所以不必擔心命名問題。使用你的函數,你只能在這個函數上調用foo,但是對於導出來說,只要它們來自不同的輸出,就可以使用我的foo函數,因爲這些實質上是解析範圍的文件。

相關問題