module.exports和exports.md

作者: 心谭 | 来源:发表于2018-06-02 22:40 被阅读14次

    推荐写法

    具体解释可以往后看。

    'use strict'
    
    let app = { // 注册全局对象
        ...
    }
    
    ... // 封装工具箱
    
    exports = module.exports = app // 导出工具箱
    

    原理

    1. 每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {}。即:module.exports = {}
    2. exports是引用 module.exports的值
    3. 模块导出的时候,真正导出的执行是module.exports,而不是exports

    1与2的demo

    foo.js

    'use strict'
    module.exports.sayHello = function(){
        console.log(this.name)
    }
    exports.name = 'foo.js' // exports引用module.exports的值
    

    test.js

    'use strict'
    
    let foo = require('./foo')
    foo.sayHello()
    

    3的demo

    为了验证真正导出的是module.exports而不是exports,我们对foo.js修改如下:

    'use strict'
    
    module.exports = {
        sayHello:function(){
            console.log(this.name)
        },
        name:'module.exports'
    }
    
    exports.sayHello = function(){
        console.log('exports')
    }
    

    test.js的输出就是:module.exports

    因为module.exports的引用改变(js中对象的赋值都是引用),断开了和exports的连接,而真正导出的只是module.exports

    欢迎技术交流,引用请注明出处。
    个人网站:Yuan Xin
    Github:godbmw

    相关文章

      网友评论

        本文标题:module.exports和exports.md

        本文链接:https://www.haomeiwen.com/subject/bhddsftx.html