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闭包 实例分析
Dec 25 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
angularJs提交文本框数据到后台的方法
Oct 08 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
Cordova(ionic)项目实现双击返回键退出应用
Sep 17 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 Javascript
JS实现扫雷项目总结
May 19 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Python常用列表数据结构小结
2014/08/06 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
对python判断是否回文数的实例详解
2019/02/08 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
在django模板中实现超链接配置
2019/08/21 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
初中音乐教学反思
2014/01/12 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
商铺消防安全责任书
2014/07/29 职场文书
爱牙日活动总结
2014/08/29 职场文书
体育运动会广播稿
2014/10/05 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
python中 Flask Web 表单的使用方法
2022/05/20 Python