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 相关文章推荐
基于jQuery替换table中的内容并显示进度条的代码
Aug 02 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 Javascript
微信小程序实现全国机场索引列表
Jan 31 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
webpack打包多页面的方法
Nov 30 Javascript
Vue内部渲染视图的方法
Sep 02 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 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
世界上第一台立体声收音机
2021/03/01 无线电
php Mysql日期和时间函数集合
2007/11/16 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
什么是继承
2013/12/07 面试题
总经理文秘岗位职责
2014/02/03 职场文书
旷课检讨书3000字
2014/02/04 职场文书
青年志愿者活动感想
2015/08/07 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
spring 项目实现限流方法示例
2022/07/15 Java/Android
python缺失值填充方法示例代码
2022/12/24 Python