如何在Node.js中导出包含静态方法的类
我们知道,JS中的 static 关键字用于定义类的静态属性和方法。静态方法或属性不能从类的实例中调用,而是从类本身调用。
class Car {
static run() { console.log('Car running...') }
}
// Error: (intermediate value).run
// is not a function
( new Car() ).run()
// Car running...
Car.run()
require() 和 module.exports 之间的关系: 默认情况下,
module.exports 指向一个对象。module.exports 的值可以是文字、函数、对象等。当我们导出一个模块时,意味着我们导出了 module.exports 的值。
require() 的任务是从调用它的模块中导入 module.exports 的值。moduleB 中 require() 函数的返回值等于 moduleA 中的 module.exports 对象。所以,关系如下所示。
require() == module.exports
使用静态方法导出类: 如果你想从 NodeJS 模块中导出一个带有静态方法的类,那么这个思路与导出一个普通类一样简单。下面我们来看一些示例。
步骤1: 使用下面的命令创建一个 NodeJS 项目。
mkdir Project **** && cd Project
npm init -y
步骤2: 在项目的根目录中创建两个JS文件,并将它们命名为 App.js 和 myModule.js
项目结构: 它将如下所示。
步骤3: 编辑 myModule.js
,使用以下代码。
myModule.js
// myModule module
class Car{
static run() { console.log('Car running...') }
}
// Export this module
module.exports = Car
我们已经创建了一个名为 Car 的类,在myModule.js中定义了一个静态方法 run() 并通过将类本身赋值给module.exports进行导出。
步骤4: 接下来,用以下代码编辑你的App.js。
App.js
// Import myModule
const mercedes = require('./myModule')
// Printing data
console.log(mercedes)
// Invoke static function
mercedes.run()
在 App.js 文件中,我们使用 require() 函数导入 myModule,并将返回值赋给变量名 mercedes。所以,类 Car 直接赋值给 mercedes,现在我们可以从 mercedes 中调用静态方法 run(),来自 App.js 模块。
步骤5: 使用以下命令运行服务器。
node App.js
输出:
[Function: Car]
Car running...
如果你想将一个模块导出为一个对象形式,那么请将类 Car 添加为 module.exports 的一个属性,就像下面展示的那样:
myModule.js
// myModule module
class Car{
static run() { console.log('Car running...') }
}
// Export this module
// add class Car as a property
// of module.exports
module.exports = { Car }
App.js
// Importing our module
const mercedes = require('./myModule').Car
// Executing run function
mercedes.run()
使用以下命令运行服务器。
node App.js
输出:
Car running...