引言
每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {}
例子
foo.js
exports.a = function() { console.log('a') } exports.a = 1
test.js
var x = require('./foo'); console.log(x.a) //1
看到这里,相信大家都看到答案了,exports是引用 module.exports的值。module.exports 被改变的时候,exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports
foo.js
exports.a = function(){ console.log('a') } module.exports = {a: 2} exports.a = 1
test.js
var x = require('./foo'); console.log(x.a) //2
exports在module.exports 被改变后,失效。
javascript里面有一句话,函数即对象,View 是对象,module.export =View, 即相当于导入整个view对象。外面模块调用它的时候,能够调用View的所有方法。不过需要注意,只有是View的静态方法的时候,才能够被调用,prototype创建的方法,则属于View的私有方法。
foo.js
function View(){ } View.prototype.test = function(){ console.log('test') } View.test1 = function(){ console.log('test1') } module.exports = View
test.js
var x = require('./foo'); console.log(x) //{ [Function: View] test1: [Function] } console.log(x.test) //undefined console.log(x.test1) //[Function] x.test1() //test1
例子,当中module.exports = createApplication
改变了module.exports了,让exports失效,通过exports = module.exports的方法,让其恢复原来的特点。
exports = module.exports = createApplication;