• module.export和export


    • module.exports 和 exports 是引用到的同一个对象,类似下面代码所示(为了举例,不是完全的正确):

            var module.exports = {};
            var exports = module.exports;
            在模块内,没对module.exports和exports做任何更改前,他们都是指向同一个空对象。

    • 在其他模块内使用require引用的是module.exports 对象,不一定是exports指向的引用对象,这点在开发中很容易因为忽略而导致bug产生。如下例子:

            exports = function(){};
            //在其他模块内
            require(...);//得到{}
            此时在其他模块内使用require引用上面模块导出的对象时,发现为空对象,为什么?因为使用exports=function(){}时,是将exports的引用指向了这个函数,而module.exports的引用还是空对象,并且其       他模块使用require引用的是module.exports,所以此处会得到空对象,而不是函数。当然此处写成module.exports = function(){}肯定是没问题的。

    • 有人说为了防止上面的bug产生,一般都执行下 exports = module.exports,,但是直接覆盖module.exports不是一个好习惯,所以对于 module.exports = {a:123, b:456} 这样的情况,分开来写:

                 exports.a = 123;
                 exports.b = 456;

    • 下面贴下几种情况,其他模块得到的不同结果:

            exports = function fn(){}; // outputs "@routes {}"
            exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"
            module.exports = function fn(){}; // outputs "@routes function fn(){}"
            module.exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"

  • 相关阅读:
    XMPP协议的原理介绍
    ExtJs自学教程(1):一切从API開始
    开源阅读器
    查询记录时rs.previous()的使用
    C/C++产生随机数
    探索WebKit内核(一)------ 菜鸟起步
    Qt编写串口通信程序全程图文解说
    超过响应缓冲区限制
    数据库原理 知识点总结
    http 双向通信之port映射
  • 原文地址:https://www.cnblogs.com/yuyuj/p/4559094.html
Copyright © 2020-2023  润新知