CommonJS中的exports、module.exports、和this

在 CommonJS 模块系统中,exportsmodule.exportsthis 是三个非常重要的对象,它们用于导出模块中的变量、函数或类。下面分别介绍这三个对象,并通过示例代码进行说明。

1. exports

exports 是一个对象,用于将模块中的变量、函数或类导出。默认情况下,exportsmodule.exports 的一个引用。

2. module.exports

module.exports 是一个对象,用于显式地导出模块中的内容。与 exports 不同的是,module.exports 可以被赋值为任何类型的值,包括对象、函数、类等。

3. this

在模块的上下文中,this 通常指向 exports 对象。这意味着你可以使用 this 来导出模块中的内容。

示例代码

假设我们有以下两个文件:example.jsmain.js

example.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// example.js
this.a = 1;
exports.b = 2;
exports = {
c: 3,
};
mudule.exports = {
d: 4,
};
exports.e = 5;
this.f = 6;
// ---当前结果---
// this {a:1,b:2,f:6}
// exports {c:3,e:5}
// module.exports {d:4}

main.js

1
2
3
// main.js
const example = require("./example");
console.log(example); // {d:4}

在上面的 main.js 文件中,我们分别调用了 example.js 中通过 exportsmodule.exportsthis 导出的函数。

总结

  • exports 是一个对象,用于将模块中的内容导出。
  • module.exports 可以被赋值为任何类型的值,用于显式地导出模块中的内容。(require 引入得到的东西)
  • this 通常指向 exports 对象,可以用于快捷地导出模块中的内容。

在实际开发中,推荐使用 module.exports 来导出模块,因为它提供了更大的灵活性。