用Javascript导出类实例

时间:2019-01-26 12:46:35

标签: javascript reactjs singleton export

我当时在看this代码,其中的类实例以某种奇怪的方式导出。

提供片段。导出如下:

    class RegisterStore {
    @observable success = false
    @observable failure = false
    @observable errors = {}
    ...
    }

export default new RegisterStore()
export { RegisterStore }

它按如下方式导入index.js:

import registerStore from './stores/RegisterStore'
...
const stores = {
registerStore
...
}

为什么在第一个代码末尾有两个出口?是
export default new RegisterStore() AND
 const NewRegisterStore = new RegisterStore(); export default NewRegisterStore 等价吗?

1 个答案:

答案 0 :(得分:4)

没有export default new RegisterStore() and export { RegisterStore }不相等。在export { RegisterStore }中,您将类作为导出对象的一部分导出,而在export default new RegisterStore()中,您正在导出类的实例。

进一步。 export default new RegisterStore()应该足以正常工作。直到您不想从同一文件中导入多个变量之前,再次导出行是无用的。在这种情况下,它将是:

export new RegisterStore();
export const anotherVariable = "TESTTEST";

并导入为:

import {RegisterStore, anotherVariable} from './stores/RegisterStore';

最后一个查询: 否

export default new RegisterStore() AND 
export default const RegisterStore = new RegisterStore() are equivalent?

也不是等效的。

首先,export default const RegisterStore = new RegisterStore()会引发错误,因为RegisterStore已被声明为类,而您再次使用const对其进行了声明。

第二:

export default const NewRegisterStore = new RegisterStore()

也是错误的,因为默认导出必须要么以匿名方式导出,要么必须在导出之前先声明变量。

对于您的示例,它应类似于:

let NewRegisterStore; export default NewRegisterStore = new RegisterStore();

所以:

export default new RegisterStore() AND 

let NewRegisterStore; export default NewRegisterStore = new RegisterStore(); are equivalent

请详细了解“命名导出”和“默认导出” here