• 技术文章 >web前端 >js教程

    seaJs中关于exports和module.exports的区别详解

    黄舟黄舟2017-10-14 10:13:03原创1033
    这篇文章主要介绍了seaJs使用心得之exports与module.exports的区别,结合实例形式分析了exports与module.exports具体功能、使用方法及相关操作注意事项,需要的朋友可以参考下

    本文实例讲述了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
    });

    以上就是seaJs中关于exports和module.exports的区别详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:JavaScript实现表单验证功能的简单示例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 浅析nodejs中怎么使用JWT?• 一文详解Angular父子组件间传数据的方法• 一文详解Nodejs怎么卸载(步骤分享)• 一文聊聊Angular中的管道(PIPE)• 10 个编写更简洁React代码的实用小技巧
    1/1

    PHP中文网