NodeJS笔记

exports和module.exports

/*

  • 使用module.exports 和 仅使用 exports的区别

    1. require方能看到的只有module.exports这个对象
    1. 它是看不到exports对象的,而我们在编写模块时用到的exports对象实际上只是对module.exports的引用
  • // 实际使用发现: module.exports 和 exports并没有指向同一个对象,只能证明结论 1 是对的,2 不符— 二者都指向了不同的{} 对象????

  • 注意:module.exports 与 exports 指向同一个空对象 { } - 且叫它 M。

  • 因此我们可以直接给 exports 赋值: exports = 3.14;

  • 但这时,exports 就失去存在意义了。因为赋值以后,它不再指向对象 M,也就无法操作 M 对象, 也就无法控制模块要导出的数据。所以上述写法是错误的,应该避免。module.exports 赋值 也是如此,下面的代码演示了该过程。

  • */

> console.log(module.exports)  // {} 
> console.log(exports)    // {}
> console.log(module.exports == exports) // true 
> module.exports = {
>     name:"悟能",
>     age: 15,
>     say: function () {
>         console.log("我是猪刚鬣八戒");} 
>    } // 这个操作就是将module.exports指向新对象,不再是M了。
>    
>    // 如果上面赋值是 module.exports.name = "唐僧"; 
>    //则export和module.exports还是指向M,console.log(exports) ---> "唐僧"
>    
> console.log(module.exports)  // { name: '悟能', age: 15, say: [Function: say] }
> console.log(exports)    // {}
> console.log(module.exports == exports);   // false,
> 
> exports.name = "悟空"; 
> exports.age = 12; 
> exports.say = function () {
>     console.log("我是信哲悟空"); }
> 
> console.log(module.exports) // { name: '悟能', age: 15, say: [Function:say] }
> console.log(exports) // { name: '悟空', age: 12, say: [Function(anonymous)] }
> 
> var expor = module.exports;
> expor.name = "我改了名字";
> console.log(module.exports); // ”我改了名字“ 
> console.log(module.exports == expor)  // true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值