对于略微半成型的想法表示抱歉,但是在开始使用Node.js时,我确信我在某处读到,因为模块是对象,this.myFunc
对于可公开访问的属性同样适用exports.myFunc
在一个模块中,像这样:
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
对象?
答案 0 :(得分: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
可以被代码中的某个局部变量覆盖,但是更容易避免这种类型的错误。
答案 1 :(得分:0)
exports对象解析范围,因此不必担心命名问题。使用你的函数你只能有一个foo调用,但是对于导出本质上你可以拥有我的foo函数,只要它们来自不同的导出,因为它们本质上是解析范围的文件。