从ES6模块导出单例类的利弊

Pros and cons of exporting a singleton class from an ES6 module

本文关键字:单例类 ES6 模块      更新时间:2023-09-26

我目前正在开发一个基于node.js与Babel的项目。

我有一个userService.js文件,它应该是一个单例,管理我想要的用户的一切,并保持用户的状态。

为什么我要这样写这个模块:

class UserService { //methods //properties}
export default new UserService(); //so it is a singleton

,然后这样导入:

import userService from 'userService';

而不是这样:

export function login() {} //other functions etc
export var user={}

,然后导入:

import * as userService from 'userService ';

仅仅是文体上的差异吗?

我知道,例如,只导入login而不导入logout方法是没有意义的,所以导出一个包含所有方法的类听起来不错,但另一种方法的优点是不必一直使用"this"关键字。

您可能希望将一组方法分组到单个文件中,这些方法不一定总是要一起导入。例如,一个实用程序类可能会列出几十个函数,而您每次只希望根据需要导入一个函数。

导出default,无论是类封装还是单个函数,都清楚地表明该模块的主要意图是什么。您还可以组合默认导出和命名导出:

// user.js
export default class User {}
export function getUserInfo()

// ... other file ...
import User, {getUserInfo} from 'user.js'
const user = new User();
getUserInfo(user);

最终取决于你希望/希望你的模块如何使用