在node中,每个模块内部都有一个自己的module对象,该module对象中有一个成员叫exports,默认在代码的最后有一句return module.exports。
如果需要对外导出成员,只需要把导出的成员挂载到module.exports。
var module = {
exports:{}
}
...
return module.exports
然而每次导出接口成员的时候都通过module.exports.xxx太麻烦了,node为了简化操作,专门提供了一个变量:exports 等于module.exports,也就是说在模块中还有这么一句代码:
var exports = module.exports
console.log(exports == module.exports) //结果为true
那么就可以使用任意一方导出内部成员。
原理
exports是module.exports
的一个引用
exports.foo = 'xxx'
//等价于
module.exports.foo = 'xxx'
当一个模块需要导出单个成员的时候,直接给exports赋值是不管用的,例如:
exports = 'hello'
因为exports是module.exports的一个引用,给exports重新赋值,就指向另一个对象了,丢失了引用关系。最后return module.exports
,而不是return exports。
同理,给module.exports重新赋值,也会丢失引用关系。
二者丢失引用关系之后,还可以重新建立引用关系:exports = module.exports
网友评论