Javascript

NodeJS中module.exports和exports的区别

本文主要是介绍NodeJS中module.exports和exports的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

NodeJS中module.exports和exports的区别

文章目录

  • NodeJS中module.exports和exports的区别
  • 前言
  • 一、简单示例
    • 1. 用 module.exports 导出
    • 2. 用 exports 导出
  • 二、区别
    • 1.module.exports 和 exports 内置对象
    • 2. require()到底指向那个内存空间


前言

在使用NodeJS时,我们经常会碰到module.exports和exports,那他们到底有什么区别呢?

一、简单示例

1. 用 module.exports 导出

// module.js 文件
function Foo() {
    this.tag= "foo";
    this.show = function() {
        console.log("show", this.tag);
    }   
};
module.exports = Foo;

在同目录下创建 test.js,内容如下:

// test.js 文件
var mod = require('./module.js');
console.log(mod)          // 打印: [Function: Foo]
var f = new mod();
f.show();                 // 打印: "show foo"

2. 用 exports 导出

还是同一个 module.js 文件,但导出使用 exports
(1) 第一种导出方式 exports = Foo

// module.js 文件
function Foo() {
    this.tag= "foo";
    this.show = function() {
        console.log("show", this.tag);
    }   
};
exports = Foo;

test.js文件,修改如下:

// test.js 文件
var mod = require('./module.js');
console.log(mod)          // 打印: {}

竟然打印是空对象 { }

(2) 第二种导出方式 exports.foo = Foo
再次修改 module.js 文件

// module.js 文件
function Foo() {
    ...
};
exports.foo = Foo;

执行 node test.js 后, 打印 { foo: [Function: Foo] }

二、区别

通过上面的示例,可以发现:

module.exports 返回的是当前模块本身,即 赋值的是什么类型,require(…) 得到的就是什么类型。
exports 并不是这样。

1.module.exports 和 exports 内置对象

nodeJS 执行一个JS文件时,会给这个JS文件内置两个 exportsmodule 对象

console.log(exports);    // 输出: {}
console.log(module);     // 输出: Module {id: '.',  path: 'xxx', ... exports: {}, ...}

console.log(module.exports === exports);    // 输出: true, 说明指向同一块内存空间

可见,module.exportsexports 默认都是一个空对象{ },都是指向同一块内存空间

2. require()到底指向那个内存空间

//demo.js
// 对 module.exports 和 exports 分别赋值为不同对象
module.exports = {name: 'module'};
exports        = {name: 'exports'};

通过上面的赋值后,module.exportsexports 指向了两个不同的内存空间

在同一目录下创建 test.js,内容如下:

var demo = require('./demo');
console.log(demo);

执行后,打印: {name: ‘module’}

可见,require() 导出的内容是 module.exports 指向的内存空间, 而并非 exports 的。

因此,当 module.exports 和 exports 指向不同的内存空间时,exports 的内容就会失效。

这篇关于NodeJS中module.exports和exports的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!