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 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
javascript之querySelector和querySelectorAll使用说明
Oct 09 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
JS获取DropDownList的value值与text值的示例代码
Jan 07 Javascript
javascript刷新父页面的各种方法汇总
Sep 03 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
Angular2环境搭建具体操作步骤(推荐)
Aug 04 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
Promise扫盲贴
Jun 24 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初学者头痛的十四个问题
2006/07/12 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
php存储过程调用实例代码
2013/02/03 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
JS获取父节点方法
2009/08/20 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
js实现简单计算器
2015/11/22 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
python创建进程fork用法
2015/06/04 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
python zip()函数使用方法解析
2019/10/31 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
检察官就职演讲稿
2014/01/13 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang