当前位置: 首页 > 工具软件 > modulejs > 使用案例 >

js中,export和module.export的区别

湛钊
2023-12-01

说明

导出模块就是导出对象,export和module.exports两者区别:

  1. export是设置导出模块对象的指定属性
  2. module.export既可以设置导出模块的所有属性,又可以设置导出模块的指定属性。

预备知识:空文件导出

假如建立一个空白的js文件,并通过require方式加载该文件。
通过console.log的方式可以看出,该模块是一个空的json对象。

重新声明

exports 就是为空文件导出的模块对象增加属性。
module.exports 既可以为导出模块增加属性,又可以统一设置属性。

类比

let jQuery = {} // 这句相当于建立js文件,什么代码都不写,引入的时候,就会返回空json对象

jQuery.ajax = function() {...}
// 这句相当于 exports.ajax = function() {...}
// 也相当于 module.exports.ajax = function() {...}
// 但不一定相当于 module.exports = {ajax: function(){...}},因为只有模块对象为空的时候,这句才会和上面等价,如果模块对象不为空,这句会将原先模块对象的其他对象都清空掉。

exports使用方式

// 可以多次导出多个属性
exports.func = str => console.log(str)
exports.test = str => console.log(str)
// 返回结果 { func : [Function] , test : [Function] }

module.exports使用方式

// module.exports只认最后一次导出设置
module.exports = {
	func: str => console.log(str)
}
module.exports = {
	test : str => console.log(str)
}
// 返回结果 { test : [Function: test] }

步骤

  1. 创建demo01.js,写入exports代码
  2. 创建demo02.js,写入module.exports代码
  3. 创建demo03.js,不写入任何代码
  4. 创建index.js,写入调用代码

代码

// demo01
exports.func = str => console.log(str)
exports.test = str => console.log(str)
// demo02
module.exports = {
    func: str => console.log(str)
}
module.exports = {
    test: str => console.log(str)
}
// demo03

// index.js
const demo01 = require('./demo01')
const demo02 = require('./demo02')
const demo03 = require('./demo03')
demo01.func('I\'am demo01.func')
demo01.test('I\'am demo01.test')
console.log(demo01) // 返回 { func: [Function], test: [Function] }

demo02.test('I\'am demo02.test')
console.log(demo02) // 返回 { test: [Function: test] }

console.log(demo03) // 返回 {}

总结

当导出模块的时候,如果什么代码都不写,返回的是空json对象;
如果用exports写,那么exports每调用一次,只能设置返回模块的指定属性;
如果用module.exports写,那么即可以设置返回模块的整个对象,也可以设置返回模块的指定属性;

 类似资料: