zoukankan      html  css  js  c++  java
  • 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] }"

  • 相关阅读:
    实战分享 | 你知道这个死锁是怎么产生的吗?
    HDU 3016 线段树区间更新+spfa
    POJ 2828 线段树(想法)
    POJ 2184 01背包+负数处理
    HDU 2955 01背包(思维)
    HDU 1171 背包
    HDU 1561 树形DP入门
    POJ 3694 tarjan 桥+lca
    POJ 2446 最小点覆盖
    POJ 2226 最小点覆盖(经典建图)
  • 原文地址:https://www.cnblogs.com/yuyuj/p/4559094.html
Copyright © 2011-2022 走看看