导出类或对象实例差异



我很困惑,或者我可以说,我不知道导出实际上是如何工作的。

我有一个React应用,我有一些受保护的路由。在登录时,我创建了一个Client对象实例,并通过Context将其传递给子组件,然后使用它。

最近我看到一种方法,示例代码直接从文件导出对象实例,然后将其导入到他们想要使用它的文件中。

/** My approach **/
export default Example
/** The Object Instance approach **/
export default new Example()

对象实例的生命周期是什么?第二种方法是否有缺点,因为它看起来更简单?

如果导出类,使用

export default Example

则模块的消费者将能够实例化他们自己的实例,并且每个实例将能够拥有自己的数据。例如

// 1.js
import TheClass from './TheClass';
const tc1 = new TheClass();
tc1.foo = 'foo';
// 2.js
import TheClass from './TheClass';
const tc2 = new TheClass();
tc2.foo = 'bar';

两个模块可以继续完全独立地使用tc1tc2,因为它们是单独的实例。

但是如果原模块导出的是一个实例而不是一个类,那么该模块的所有消费者都被强制使用同一个实例:
// 1.js
import theInstance from '...';
theInstance.foo = 'foo';
// 2.js
import theInstance from '...';
// might not be a good idea to do theInstance.foo = 'bar' here
// because that will affect 1.js as well
// and will affect any other modules that imported the instance

简而言之,导出类比导出实例更容易重用。有时潜在的可重用性是脚本编写者认为重要的东西,有时则不然。(有时,即使您一开始并不认为它有用,但以后可能会遇到迫使您重新考虑的情况。)

有时你想确保在一个脚本中只有一个实例,在这种情况下

export default new Example()

是完成它的一种方法。

相关内容

  • 没有找到相关文章

最新更新