module.exports和exports的区别

在seajs中exportsmodule.exports使用方式

define(function(require, exports, module) {
  exports.fn = function() {};
});

define(function(require, exports, module) {
  module.exports = {
    fn: function() {}
  };
});

define(function(require, exports, module) {
  module.exports.fn=function() {};
});

简单从这三种效果来看,基本没什么区别。

如果我们将module.exports置为空对象。module.exports={}
exports的值没变。

module.exports.fn 和exports .fn是没有区别的。
module.exports={}和module.exports.fn还是有区别的。
前者是重新指向一个空对象。后者是在原来的对象上增加一个方法fn.

看下如下几个代码结构。


define('wq.gwq.feedlist', function(require, exports, module){
    "use strict";
    var _feedHelper = require('wq.gwq.feedlistHelper');
    var _feedEvent  = require('wq.gwq.feedlistEvent');
}
define('wq.gwq.feedlistHelper', function(require, exports, module){
    "use strict";
    module.exports = {
        fn:function(){}
    }
}
define('wq.gwq.feedlistEvent', function(require, exports, module) {
    "use strict";
    var _feedHelper = require('wq.gwq.feedlistHelper');
    $(body).on("click",function(){
        _feedHelper.fn();
    });
}

上述代码块运行的时候,报异常。在feedlistEvent 里面的_feedHelper无法找到fn。即没有fn方法。
解决方法:
1、feedlist中调换引用方法的顺序。即:

var _feedEvent  = require('wq.gwq.feedlistEvent');
var _feedHelper = require('wq.gwq.feedlistHelper');

2、改变feedlistHelper的对外暴露方法的方式。即:

module.exports.fn = function(){};exports.fn = function(){};

从上面两种解决方式可以看出:
require返回的是module.exports指向的对象。
在require该模块的时候,如果该模块还没有添加方法。那么后续可以使用exports.fnmodule.exports.fn的方式给添加,因为这两种都是给module.exports指向的对象增加方法。

但是使用module.exprots = {},这种则是将指针重置。已经require之后的功能,则无法生效了。
如果在require之前设置,则require可以引用新的对象。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值