详解Sea.js中模块 导出和出口的区别
一、官方解释
因为SeaJs和Nodejs都是基于CommonJS,所以直接看的结节的官方文档解释模块导出模块导出对象由模块系统创建。有时这是不可接受的;许多人希望他们的模块是某个类的实例。为此,请将所需的导出对象分配给模块.导出.请注意,将所需的对象分配给出口只会重新绑定本地出口变量,这可能不是您想要做的模块.导出对象是由模块系统创建的。有时这是难以接受的;许多人希望他们的模块成为某个类的实例。为了实现这个,需要将期望导出的对象赋值给模块。导出。注意,将期望的对象赋值给出口会简单地重新绑定到本地出口变量上,这可能不是你想要的出口。
出口变量在模块的文件级范围内可用,并被赋予模块.导出的值,然后再对模块进行求值。它允许一个快捷方式,因此module.exports.f=.可以更简洁地写成exports.f=.但是,请注意,像任何变量一样,如果为导出分配了新值,它将不再绑定到模块出口3360译文:出口变量是在模块的文件级别作用域内有效的,它在模块被执行前被赋于模块。导出的值。它有一个快捷方式,以便module.exports.f=.可以被更简洁地写成exports.f=.注意,就像任何变量,如果一个新的值被赋值给出口,它就不再绑定到模块。导出(其实是出口。属性会自动挂载到没有命名冲突的模块。出口.属性)要求
从需要导入方式去理解,关键有两个变量(全局变量模块。导出,局部变量出口),一个返回值(模块。导出)
功能要求(.){ var module={ exports: {((模块,导出)={ //你的被引入代码start//var exports=module。导出={ };(默认都有的)函数some _ func(){ };exports=some _ func//此时出口不再挂载到module.exports,//export将导出{}默认对象module.exports=some _ func//此时,这个模块将导出某些功能对象,覆盖出口上的some_func //你的被引入代码End })(模块,模块。出口);//不管是出口还是模块。导出,最后返回的还是模块.导出返回模块。出口;}二、演示事例
事例一:1.js
console.log(导出);//{ }控制台。日志(模块。出口);//{ }控制台。日志(导出===模块。出口);//真控制台。日志(导出==模块。出口);//true /**模块{ id:exports: {},parent: null,filename: '/1.js ',loaded: false,children: [],path s :['/node _ modules ']} */console。日志(模块);从事例一中,可以看出来
1.每个射流研究…文件一创建,都有一个var导出=模块。导出={ };使出口和模块。导出都指向一个空对象。
2 .模块是全局内置对象出口是被定义变量创建的局部对象。
3 .模块。导出和出口所指向的内存地址相同
事例二:2.js、3.js
//2 . jsexports . id=' exports的id ';出口。id2='导出的id2 ';exports . func=function(){ console . log(' exports的函数');};exports . func 2=function(){ console . log(' exports的func 2 ');};module . exports={ id : ' module . exports的id ',func : function(){ console . log(' module . exports的function ');}};//3.jsvar a=require('。/2 . js ');//当属性和函数都在module . exports:console . log(a . id)中定义时;//idconsole . log of module . exports(a . func());//module.exports//when函数该属性未在module.exports中定义,该函数已在module.exports中定义了console . log(a . id2).//undefined console . log(a . func());//module.exports//when函数该函数未在module.exports中定义,该属性在module.exports中定义了console . log(a . id);//idconsole . log of module . exports(a . func 2());//报告了typeerror:a错误。从示例2中可以知道func2is不是一个函数:
1.module.exports就像是出口的大哥。当module.exports作为一个整体导出时,它将覆盖导出的属性和方法。
2.请注意,如果属性/方法仅安装在module . exports/exports上。exports.id=1和module.exports.id=100,module.exports.id=function(){}和exports.id=function(){},最终的id值取决于exports.id和
3.如果同时分配了导出和module.exports,则导出使用的属性和方法必须出现在module.exports中;如果属性没有在module.exports中定义,它们将是未定义的;如果这些方法没有在module.exports中定义,将引发TypeError错误。
示例3 4.js,5.js
导出对象、原型、构造函数的用法
//4.jsvar a=require('。/5 . js ');//如果类被传递,new就是一个对象var person=new a('Kylin ',20);console . log(person . speak());//我叫Kylin,年龄20//如果在构造函数过程中不需要初始化参数,直接调用方法/属性//a.speak()即可;//我叫kylin,年龄20//5.js//person类函数person(姓名、年龄){this。name=namethis.age=年龄;}//将方法person . prototype . speak=function(){ console . log('我的名字是' this.name ',我的年龄是' this.age ')添加到类中;};//返回类模块,exports=Person;//如果构造函数没有传入参数(名称、年龄),直接传入对象//模块。exports=newperson ('kylin ',20);话虽如此,建议还是用出口。属性/方法,如果它只是一个属性或方法。如果导出多个属性或方法或者使用对象构造方法、组合原型等,建议使用module.exports={}。文章中有很多地方可能描述不准确,提到的点也不够全面。如果有错,我们还是希望改正!
摘要
以上就是本文的全部内容。希望这篇文章的内容对你的学习或工作有所帮助。有问题可以留言交流。
版权声明:详解Sea.js中模块 导出和出口的区别是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。