suchen

Heim  >  Fragen und Antworten  >  Hauptteil

node.js - nodejs exports module.exports

nodejs 中经常会看到这样的代码
exports = module.exports = {}
请问 为什么要让 exports = module.exports 呢? 这样做有什么作用呢? 谢谢!!!

巴扎黑巴扎黑2777 Tage vor567

Antworte allen(1)Ich werde antworten

  • PHPz

    PHPz2017-04-17 15:32:40

    让这个模块更加纯粹的写法。
    module.exports是require()方法调用模块的接口,而exports可以给模块添加更多的方法,而exports返回的是一个实例化对象,指向module.exports
    比如对于一个构造函数来说:
    Person.js

    var Person = function() {
        this.name = 'Samuel';
    }
    
    //通过module.exports
    module.exports = Person;//这里将Person作为模块暴露的接口,传递给require(),使其返回这个Person
    exports.one = 'Shervesi';//这里给Person添加了一个属性,那么通过require()返回的模块也会拥有这个方法

    Use.js

    var P = require('./Person');
    console.log(P.name);//'Samuel'
    console.log(P.one);//'Shervesi',这个属性是Person所不具有的

    因此可以将exports理解为给模块进行最后修饰的方法;
    而module.exports则负责暴露一个接口供require()方法调用,若module.exports没有被声明指向,那它就默认的导出exports所指向的对象,如这样一个场景:
    Person.js

    var Person = function() {
        this.name = 'Samuel';
    }
    module.exports = 'I am a string';//module.exports被声明指向了一个字符串
    exports.one = 'Shervesi';

    User.js

    var P = require('./Person.js');
    console.log(P);//'I am a string'  //这是module.exports所提供的接口指向的
    console.log(P.one);//这里会出现类型错误,因为负责暴露接口的module.exports已经导出了一个字符串,即是一个常量,因此不能携带one属性,exports所修饰的one属性被‘干掉’。
    

    总结:

    • module.exports是模块导出的仲裁,它决定到底导出一个什么东西,本质上就是提供给require()方法的一个返回值,因此它可以是任何js基本类型(包括null);

    • exports是给导出模块进行修饰的辅助方法,但受module.exports的仲裁,决定模块是否能具有这个属性。

    Antwort
    0
  • StornierenAntwort