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中暂停功能的实现代码
Mar 04 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
javascript 全选与全取消功能的实现代码
Dec 23 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 Javascript
js中addEventListener()与removeEventListener()用法案例分析
Mar 02 Javascript
vue中用 async/await 来处理异步操作
Jul 18 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 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
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
解析jquery中的ajax缓存问题
2013/12/19 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
Node.js文件操作详解
2014/08/16 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python实现建立SSH连接的方法
2015/06/03 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python制作抽奖程序代码详解
2021/01/15 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
Exception类的常用方法
2012/06/16 面试题
领导证婚人证婚词
2014/01/13 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
导游词之岳阳楼
2019/09/25 职场文书
教你如何用cmd快速登录服务器
2022/06/10 Servers