commenjs 规范里exports 和 module.exports的关系和区别
2013-01-02 01:38
543 查看
1、模块对外输出接口都是通过“module.exports”来实现输出的。即使是通过“exports”定义的接口,也是通过把接口添加到"module.exports"上对外输出的。
2、"exprots"输出的结构如key:value 散列值的字面量对象({ }),module.exprots可以输出任何合法的js数据类型(boolean, number, date, JSON, string,
function, array, and so on)。
3、如果“exports”里和"module.exports"定义了相同的字段,那么有定义的会覆盖先定义的。
4、如果“module.exprots”直接被赋予任何合法的js数据类型。那么模块输出仅仅是直接被赋值的数据。(形如:module.exprots=“yyp”;或者module.exprots=funtion(){};)
接下来是见证以上四条依据的时刻:
测试1:
文件1如图:
文件2如图:
输出:
测结果可用 第1条解释。
测试二:
文件1如图:
文件2如图:
输出:
测结果可用 第3条解释。
测试三:
文件1如图:
文件2如图:
输出:
测结果可用 第2、4条解释。
补充:看了express.js的源码后,发现用以上4条解释不了;源代码如下:
所以又测试了几个不同情况,由于情况多,就不上测试情形了,结合测试又总结了一条:
5:“ module.exports” 要是被赋值Object数据类型(被{ }包起来的数据格式)以外的数据类型之后 。 module.exports就直接返回的是被赋值的非Object数据,
而exports只要背赋值是Object数据类型(被{ }包起来的数据格式)或者函数(也就是可以增加属性的类型)还可以输出接口,如果赋值的数据类型是不能增加属性的,则输不出接口,exports能输出接口的前提是 module.exports的值是Object数据类型(被{ }包起来的数据格式)。
第5条是对第4条的一个补充吧,自己感觉理解的也不深,只是做个笔录,为以后加深理解做铺垫。
"在当前模块下,module对象引用当前模块,因此module.exports与exports指向同一对象的引用。在某些情况下,为了较快捷的取到导出对象,也可以直接覆盖exports对象为要导出的对象。"
摘自-http://blog.csdn.net/zzulp/article/details/8100927
参考
突袭HTML5之WebSocket入门5 - 包管理工具npm
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
2、"exprots"输出的结构如key:value 散列值的字面量对象({ }),module.exprots可以输出任何合法的js数据类型(boolean, number, date, JSON, string,
function, array, and so on)。
3、如果“exports”里和"module.exports"定义了相同的字段,那么有定义的会覆盖先定义的。
4、如果“module.exprots”直接被赋予任何合法的js数据类型。那么模块输出仅仅是直接被赋值的数据。(形如:module.exprots=“yyp”;或者module.exprots=funtion(){};)
接下来是见证以上四条依据的时刻:
测试1:
文件1如图:
文件2如图:
输出:
测结果可用 第1条解释。
测试二:
文件1如图:
文件2如图:
输出:
测结果可用 第3条解释。
测试三:
文件1如图:
文件2如图:
输出:
测结果可用 第2、4条解释。
补充:看了express.js的源码后,发现用以上4条解释不了;源代码如下:
/** * Expose `createApplication()`. */ exports = module.exports = createApplication; /** * Framework version. */ //exports.version = '3.0.0beta7'; /** * Expose mime. */ exports.mime = send.mime; /** * Create an express application. * * @return {Function} * @api public */ function createApplication() { var app = connect(); utils.merge(app, proto); app.request = { __proto__: req }; app.response = { __proto__: res }; app.init(); return app; }
所以又测试了几个不同情况,由于情况多,就不上测试情形了,结合测试又总结了一条:
5:“ module.exports” 要是被赋值Object数据类型(被{ }包起来的数据格式)以外的数据类型之后 。 module.exports就直接返回的是被赋值的非Object数据,
而exports只要背赋值是Object数据类型(被{ }包起来的数据格式)或者函数(也就是可以增加属性的类型)还可以输出接口,如果赋值的数据类型是不能增加属性的,则输不出接口,exports能输出接口的前提是 module.exports的值是Object数据类型(被{ }包起来的数据格式)。
第5条是对第4条的一个补充吧,自己感觉理解的也不深,只是做个笔录,为以后加深理解做铺垫。
"在当前模块下,module对象引用当前模块,因此module.exports与exports指向同一对象的引用。在某些情况下,为了较快捷的取到导出对象,也可以直接覆盖exports对象为要导出的对象。"
摘自-http://blog.csdn.net/zzulp/article/details/8100927
参考
突袭HTML5之WebSocket入门5 - 包管理工具npm
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
相关文章推荐
- commenjs 规范里exports 和 module.exports的关系和区别
- exports与module.exports,export与export default 之间的关系和区别
- module.exports与exports,export与export default之间的关系和区别
- module.exports与exports的关系和区别
- module.exports与exports,export与export default之间的关系和区别
- module.exports与exports,export与export default之间的关系和区别
- module.exports与exports,export与export default之间的关系和区别
- module.exports与exports,export与export default之间的关系和区别
- nodejs中exports与module.exports的区别
- exports 和 module.exports 的区别
- exports与module.exports的区别
- exports 和 module.exports 的区别
- nodejs中exports与module.exports的区别
- Node.js模块导出exports 和 module.exports 的区别
- exports 和 module.exports 的区别
- exports 和 module.exports 的区别
- Node.js 中exports 和 module.exports 的区别
- exports 和 module.exports 的区别
- 【Node.js】module.exports和exports的区别与使用
- nodejs中exports与module.exports的区别详细介绍