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 相关文章推荐
js文件中调用js的实现方法小结
Oct 23 Javascript
JS分页控件 可用于无刷新分页
Jul 23 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
Jan 13 Javascript
JavaScript订单操作小程序完整版
Jun 23 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
Jul 07 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
iView框架问题整理小结
Oct 16 Javascript
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
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
写好自荐信的要点
2013/11/06 职场文书
校长先进事迹材料
2014/02/01 职场文书
交通事故委托书范本
2014/09/28 职场文书
党员个人总结自评
2015/02/14 职场文书
《植树问题》教学反思
2016/03/03 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
python用字节处理文件实例讲解
2021/04/13 Python
简单介绍Python的第三方库yaml
2021/06/18 Python
python识别围棋定位棋盘位置
2021/07/26 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python