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插件Tmpl的简单使用方法
Apr 27 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
Vue结合SignalR实现前后端实时消息同步
Sep 19 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
Vue项目中使用Vux的安装过程
May 01 Javascript
在vue 中使用 less的教程详解
Sep 26 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
JS实现页面数据懒加载
Feb 13 Javascript
详解vue v-model
Aug 31 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php Mysql日期和时间函数集合
2007/11/16 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
PHP反射API示例分享
2016/10/08 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
javascript中常用编程知识
2013/04/08 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python线程中的同步问题及解决方法
2019/08/29 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
2014年元旦感言
2014/03/06 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
大学生标准自荐书
2014/06/15 职场文书
第一军规观后感
2015/06/12 职场文书