详解Sea.js中Module.exports和exports的区别
一、官方解释
exports
require
从require导入方式去理解,关键有两个变量(全局变量module.exports
,局部变量exports
)、一个返回值(module.exports
)
二、demo事例
事例一:1.js
从事例一中,可以看出来
1.每个js文件一创建,都有一个var exports = module.exports = {};
,使exports
和module.exports
都指向一个空对象。
2.module
是全局内置对象,exports
是被var
创建的局部对象。
3.module.exports
和exports
所指向的内存地址相同
事例二:2.js、3.js
由例二可以知道:
1.module.exports
像是exports
的大哥,当module.exports
以{}
整体导出时会覆盖exports
的属性和方法,
2.注意,若只是将属性/方法挂载在module.exports./exports.
上时,exports.id=1
和module.exports.id=100
,module.exports.id=function(){}
和exports.id=function(){}
,最后id的值取决于exports.id
和module.exports.id
的顺序,谁在后,就是最后的值
3.若exports
和module.exports
同时赋值时,exports
所使用的属性和方法必须出现在module.exports
,若属性没有在module.exports
中定义的话,出现undefined
,若方法没有在module.exports
中定义,会抛出typeerror
错误。
例三 4.js、5.js
module.exports
的对象、prototype
、构造函数使用
说了这么多,其实建议就是,如果只是单一属性或方法的话,就使用exports.
属性/方法。要是导出多个属性或方法或使用对象构造方法,结合prototype
等,就建议使用module.exports = {}
。文章有很多地方描述的可能不是很准确,提到的点也不够全面,如果有不对的地方,还望斧正!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
推荐阅读
-
java中timer的schedule和scheduleAtFixedRate方法区别详解
-
Java中关于int和Integer的区别详解
-
详解HTML5中div和section以及article的区别
-
Android MotionEvent中getX()和getRawX()的区别实例详解
-
详解Node.js中path模块的resolve()和join()方法的区别
-
Python中__init__和__new__的区别详解
-
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
-
Android中dip、dp、sp、pt和px的区别详解
-
H5 canvas中width、height和style的宽高区别详解
-
深入Oracle的left join中on和where的区别详解