从ES6模块导出单例类的利弊
Pros and cons of exporting a singleton class from an ES6 module
我目前正在开发一个基于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);
最终取决于你希望/希望你的模块如何使用
相关文章:
- 和兼容的单例骨干模型
- 有状态单例模块
- 在什么情况下我们需要在javsacript中实现单例类
- j查询开关单击类图片更改
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 原始值被称为单例的现象是什么?
- AngularJS 模式单例在服务中未更新视图
- 创建命名空间 Javascript 单例类的对象
- 流星.js单例确认框
- 选择并单击类中的链接
- Javascript 单例模式
- 如何将 AMD 模块从单例转换为实例
- 为什么这个javascript单例方法有效
- 扩展现有单例
- 如何使用Gulp和Babelify (Babel + Browserify)编译单例和类
- 在CoffeeScript中为我的单例类定义属性getter
- 从ES6模块导出单例类的利弊
- 在Typescript/ES6中,单例模式的正确方式是什么?
- 在javascript中相互访问单例类和内部类