module.exports和exports.md

推荐写法

具体解释可以往后看。

'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

欢迎技术交流,引用请注明出处。
个人网站:董沅鑫的个人网站
Github:godbmw

转载于:https://www.cnblogs.com/geyouneihan/p/9127298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值