seaJs使用心得之exports与module.exports的区别实例分析


Posted in Javascript onOctober 13, 2017

本文实例讲述了seaJs使用心得之exports与module.exports的区别。分享给大家供大家参考,具体如下:

1. exports 是 module.exports 的 辅助对象,exports对外提供api 时需要用return 返回exports 对象

2. module.exports 也可直接向外提供api

参考 : https://github.com/seajs/seajs/issues/242

exports Object

exports 是一个对象,用来向外提供模块接口。

define(function(require, exports) {
 // 对外提供 foo 属性
 exports.foo = 'bar';
 // 对外提供 doSomething 方法
 exports.doSomething = function() {};
});

除了给 exports 对象增加成员,还可以使用 return 直接向外提供接口。

define(function(require) {
 // 通过 return 直接提供接口
 return {
  foo: 'bar',
  doSomething: function() {}
 };
});

如果 return 语句是模块中的唯一代码,还可简化为:

define({
 foo: 'bar',
 doSomething: function() {}
});

上面这种格式特别适合定义 JSONP 模块。

特别注意:下面这种写法是错误的!

define(function(require, exports) {
 // 错误用法!!!
 exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

正确的写法是用 return 或者给 module.exports 赋值:

define(function(require, exports, module) {
 // 正确写法
 module.exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

提示:exports 仅仅是 module.exports 的一个引用。在 factory 内部给 exports 重新赋值时,并不会改变 module.exports 的值。因此给 exports 赋值是无效的,不能用来更改模块接口。

module.exports Object

当前模块对外提供的接口。

传给 factory 构造方法的 exports 参数是 module.exports 对象的一个引用。只通过 exports 参数来提供接口,有时无法满足开发者的所有需求。 比如当模块的接口是某个类的实例时,需要通过 module.exports来实现:

define(function(require, exports, module) {
 // exports 是 module.exports 的一个引用
 console.log(module.exports === exports); // true
 // 重新给 module.exports 赋值
 module.exports = new SomeClass();
 // exports 不再等于 module.exports
 console.log(module.exports === exports); // false
});

注意:对 module.exports 的赋值需要同步执行,不能放在回调函数里。下面这样是不行的:

// x.jsdefine(function(require, exports, module) {
 // 错误用法
 setTimeout(function() {
  module.exports = { a: "hello" };
 }, 0);
});

在 y.js 里有调用到上面的 x.js:

// y.jsdefine(function(require, exports, module) {
 var x = require('./x');
 // 无法立刻得到模块 x 的属性 a
 console.log(x.a); // undefined
});

希望本文所述对大家sea.js程序设计有所帮助。

Javascript 相关文章推荐
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
JavaScript实现网页上的浮动广告的简单方法
Jun 14 Javascript
javaScript中的原型解析【推荐】
May 05 Javascript
Bootstrap 组件之按钮(二)
May 11 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
Nov 10 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
vue select 获取value和lable操作
Aug 28 Javascript
element中Steps步骤条和Tabs标签页关联的解决
Dec 08 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue中axios处理http发送请求的示例(Post和get)
Oct 13 #Javascript
JavaScript实现随机数生成器(去重)
Oct 13 #Javascript
AngualrJs清除定时器遇到的坑
Oct 13 #Javascript
React Native中Navigator的使用方法示例
Oct 13 #Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 #Javascript
ReactJS实现表单的单选多选和反选的示例
Oct 13 #Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 #Javascript
You might like
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
Python的函数嵌套的使用方法
2014/01/24 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
详解Django中的过滤器
2015/07/16 Python
图解Python变量与赋值
2018/04/03 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python安装Bs4的多种方法
2020/11/28 Python
Python实现随机爬山算法
2021/01/29 Python
如何设置Java的运行环境
2013/04/05 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
介绍一下XMLHttpRequest对象
2012/02/12 面试题
工会主席岗位责任制
2014/02/11 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
学生评语大全
2014/04/18 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
节约用电通知
2015/04/25 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
礼仪培训心得体会
2016/01/22 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
mysql 子查询的使用
2022/04/28 MySQL