zoukankan      html  css  js  c++  java
  • nodejs 包引用的终极结论

    通常我们用exports 或module.exports 来导出一个文件中的接口和字段,用require来引用导出的对象.那么这个exports 和 module.exports到底有啥关联呢?

    1.新建app.js 然后写代码 :console.log({} instanceof Object) 结果是true  说明{} 是一个Object 的实例对象,这里是字面量的形式.

    2.在app.js 中写上 console.log(module)  

    然后运行,结果类似下面的:可知module.exports 是一个{} 形式的对象.

    Module {
      id: '.',
      exports: {},
      parent: null,
      filename: '/Users/johnson/Documents/app.js',
      loaded: false,
      children: [],
      paths:
       [ '/Users/johnson/Documents/node_modules',
         '/Users/johnson/node_modules',
         '/Users/node_modules',
         '/node_modules' ] }

    3. 而单独运行console.log(exports)  结果是 {}   

    4. 不过console.log(exports ==={}) ,console.log(module.exports ==={}) 都是false,说明{}是一个全新的Object 对象.

    5.再写个: console.log(exports === module.exports)  结果是true  可以知道module.exports  和  exports 是相同的对象.

    注意:{}表示创建了一个新的对象, 这种是Object 对象的字面量形式,比较对象的时候,比较的还是地址.

    由以上结论可以知道,平时我导出接口的时候,用exports 和  module.exports 没有什么区别,应为它们的指向是一样的,类似下面的代码:

    module.exports = exports = {}

    不过还有一点,require 的时候,我们用的究竟是module.exports 呢还是 exports 呢?

    新建js文件test.js:

    module.exports.minus = function(a,b){
        return a - b;
    }
    exports.multiply = function(a,b){
    
        return a * b;
    }
    
    // exports = {}
    
    // module.exports = {}

    新建js文件app.js:

    var t = require('./test')
    
    console.log(t.minus(3,2))
    console.log(t.multiply(3,2))

    经过测试exports = {} 注释或不注释都不会影响结果 ,但是如果把下面的那句注释去掉,则运行报错,找不到导出的接口.

    这说明,require 引用的是module.exports 对应的对象. 而exports 的意义就在于省略了一个module而已.

  • 相关阅读:
    [转]linux top 命令
    [转]Linux下实用的查看内存和多核CPU状态命令
    Totem ring protocal
    qemu qemusystemx86_64 qemukvm kvm 四个命令
    jsp>过滤器 小强斋
    jsp>Tomcat 6.0数据源配置记录 小强斋
    jsp>过滤器 小强斋
    jsp>监听器 小强斋
    jsp>Tomcat 6.0数据源配置记录 小强斋
    jsp>jsp执行过程 小强斋
  • 原文地址:https://www.cnblogs.com/xuezizhenchengxuyuan/p/5981308.html
Copyright © 2011-2022 走看看