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键盘
May 02 Javascript
Add Formatted Text to a Word Document
Jun 15 Javascript
js 多浏览器分别判断代码
Apr 01 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
理解jquery事件冒泡
Jan 03 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
利用jquery实现瀑布流3种案例
Sep 18 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
javascript解析json格式的数据方法详解
Aug 07 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 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
PHP4之真OO
2006/10/09 PHP
实现树状结构的两种方法
2006/10/09 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
js获取视频时长代码
2014/04/10 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
JS实现多功能计算器
2020/10/28 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
django中瀑布流写法实例代码
2019/10/14 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
管道维修工岗位职责
2013/12/27 职场文书
给交警的表扬信
2014/01/12 职场文书
高中生活自我鉴定
2014/01/18 职场文书
走群众路线学习笔记
2014/11/06 职场文书
回复函范文
2015/07/14 职场文书