Vue

module.exports与exports的区别

2020-02-01  本文已影响0人  agamgn

一、module.exports与exports的区别

 在写node的自定义模块的时候,经常是直接module.exports={}完事,但是偶然间看到exports.fn = function(){},感觉少些了一个module,更加简洁于是我想搞清楚他们的区别。
区别:
exports返回的是模块函数
module.exports返回的是模块对象本身,返回的是一个类
使用上的区别是:
exports的方法可以直接调用
module.exports需要new对象之后才可以调用
exports案例
正确例子:

//demo1.js
function Persion2(){
    console.log("agam2");
}
exports.Persion2=Persion2;
console.log(exports)
console.log(module.exports)
//index.js
const persion=require("./demo1")
persion.Persion2()
//{ Persion2: [Function: Persion2] }
//{ Persion2: [Function: Persion2] }
//agam2

发现此时exports和module.exports对象输出的都是一个sayHello方法,
为什么module.exports也有exports方法了,简单点理解就是:exports只是module.exports的全局引用
接下来,我们修改下
错误例子:

//demo1.js
class Persion{
    constructor(age){
        this.age=age;
    }
    getName(){
        return "agam";
    }
}
exports.Persion2=Persion;
console.log(exports)
console.log(module.exports)
//index.js
const persion=require("./demo1")
persion.Persion()
//Class constructor Persion cannot be invoked without 'new'

可见上面的结论exports返回的是模块函数。
既然exports是moudle.exports的一个引用,那么exports能做的moudle.exports都能做,不能做的moudle.exports也能做。

//demo1.js
class Persion{
    constructor(age){
        this.age=age;
    }
    getName(){
        return "agam";
    }
}
function Persion2(){
    console.log("agam2");
}
module.exports=Persion;
//index.js
const persion=require("./demo1")
let p =new persion();
console.log(p.getName())
//agam2

总结

上一篇 下一篇

猜你喜欢

热点阅读