exports and module.exports

2015-12-24  本文已影响0人  HilaryZhu

结论:exports是module.exports的引用,初始化为:exports = module.exports = {},即exports和module.exports指向同一个对象。但是require函数执行后只返回module.exports。

为了验证上面的结论,我们来看下面两个例子:
eg1:

greet.js:
exports.greet = function () {
  console.log("hello node.");
};
console.log(exports);
console.log(module.exports);
app.js:
var Greet = require('./greet.js');
Greet.greet();

然后执行node app.js你会得到如下结果:

{ greet: [Function] }
{ greet: [Function] }
hello node.

因为exports和module.exports指向同一个对象,当通过exports修改这个对象后,module.exports指向的对象也会改变。

eg2:

greet.js:
module.exports = function() {
    console.log("hello node");
};
console.log(exports);
console.log(module.exports);
app.js:
var greet = require('./greet.js');
greet();

然后执行node app.js,结果如下:

{}
{ greet: [Function] }
hello node.

为什么会得到上面结果呢?greet.js中module.exports被重写,指向了一个函数。这就导致exports和module.exports分别指向不同的对象,而且require函数执行时module.exports被返回。

上一篇下一篇

猜你喜欢

热点阅读