【发布时间】:2018-07-04 19:35:22
【问题描述】:
正如我所见,ES6 为对象字面量导出单例:
// module A
export const singleton = {
user: 'a',
asd: 'b'
}
setTimeout(() => console.log(singleton.user), 5000) // 'asd'
// module B
import { singleton } from './A'
singleton.user = 'asd'
ie:如果我更改 B 中的 A 导出,它也会在 A 和所有导入 A 的模块中更改 因此,我希望 A 导出对象的新实例而不是单例,我这样做了:
// module A
export const getObject = () => ({ user: 'asd', asd: 'b' })
这行得通,但我在想,有没有更简洁的方法来导出新实例?或者唯一的方法是导出我应该在 B 中调用的函数来获取我的新实例?
我想我也可以做到,但并不能说服我:
// module A
export const getObject = (() => ({ user: 'asd', asd: 'b' }))()
谢谢
【问题讨论】:
-
使用工厂函数有什么问题?
-
freezing
singleton呢? -
@sp00m - op 每次都想要一个新的对象实例。冻结并没有做到这一点。
-
@LucasJanon 仅供参考,“freeze”的过去分词是“frozen”,所以你的变量应该命名为
frozenObj;) -
哈哈,看来我应该多看迪斯尼电影,不要再考虑单例来改进我的变量命名了:p
标签: javascript reactjs ecmascript-6 es6-modules