在JavaScript中导出实例化类是不好的实践吗?

3

我一直在讨论是否有意义导出已经实例化的类:

class myClass{
  constructor(){
    console.log("Hello");
  }
  foo(){
    console.log("Do something!");
  }
}

const cls = new myClass();
export default cls; 

然后我们这样使用它:
import myClass from './js/myclass';
myClass.foo();

我认为这违背了类的设计目的。我的朋友说,这允许你在需要/导入文件时“直接使用它”,类似于NodeJS的pathfs等函数。

因此,这是否可以被视为一种不好的实践,还是完全可以接受的?


3
如果不使用它作为类,请不要创建类。只需拥有几个局部变量,并导出可以访问这些变量的函数。 - PeterMader
1
只需执行 export default { foo() { ... } };,不需要类。 - 4castle
2
更重要的是,你不仅可以使用它,而且当在不同的地方导入时,你得到的是一个共享的单个实例。这取决于你的需求,它可能非常有用或者没有那么有用。 - Mark
2
与创建新类相比使用export const的区别 - Bergi
显示剩余3条评论
1个回答

1

是的,这是不好的做法。

我们不建议导出一个评估(例如new myClass()),原因有几个。

在这种情况下,模块只会导出一次评估结果。这很少是期望的结果,但如果确实需要,应该使用单例模式。一些ES6模块的优势会丧失(树摇更快的导入访问),它使导入变慢,并使它们可能引起副作用,而这些副作用应该在调用时发生。可以通过导出函数或类来避免缺点。

另请参见:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接