【问题标题】:Is it bad practice to export instantiated class in JavaScript?在 JavaScript 中导出实例化类是不好的做法吗?
【发布时间】:2018-01-20 22:57:47
【问题描述】:

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

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等……功能。

因此,这会被认为是一种不好的做法,还是完全可以接受?

【问题讨论】:

  • 如果不作为类使用,就不要创建类。只要有几个局部变量,以及可以访问这些变量的导出函数。
  • @PeterMader 是的。这更有意义。
  • 只要export default { foo() { ... } }; 不需要上课。
  • 更重要的是,能够使用它是因为您获得了在不同位置导入时共享的单个实例。根据您的需要,这可能非常有用。

标签: javascript


【解决方案1】:

是的,这是不好的做法。

We don't recommend 导出评估(例如new myClass())有几个原因。

在这种情况下,模块会导出只计算一次的结果。这很少是期望的结果,但如果是,则应使用单例模式。失去了一些 ES6 模块的好处(tree-shakingfaster access to imports),它使导入速度变慢,并可能导致副作用,而这些副作用应该在调用时发生。通过导出函数或类可以避免这些缺点。

另见:

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多