2017-06-01 59 views
0

我想初始化与特定值的对象,有一个使用先前初始化对象的值另一个对象......不是太多的话更好,我有以下几点:如何使用ES6保持JavaScript导入对象的状态?

// file1.js 
export default { 
    myVar1: null, 
    initialize(value) { 
    this.myVar1 = value 
    } 
} 

的文件2进口文件1,创建一个功能打印myVar1

// file2.js 
import { myVar1 } from 'file1' 

export default { 
    printVar() { 
    console.log(myVar1) 
    } 
} 

文件3初始化文件1,并使用文件2打印的myVar1

// file3.js 
import File1 from 'file1' 
import File2 from 'file2' 

File1.initialize('hello world') 
File2.printVar() // logs undefined 

我想初始化file1并希望file2访问file1的值来打印它。虽然它的值在导入时未定义。

我想在Javascript中使用工厂模式来做到这一点。有没有办法实现以下目标?

感谢

+0

你可以定义'getMyVar'函数并且暴露它而不是'myVar'。或者不要在'file2'中破坏 –

回答

0

您的文件2改成这样

import file1 from './file1' 

export default { 
    printVar() { 
    console.log(file1.myVar1) 
    } 
} 
+0

这不起作用 – alexmngn

+0

你可能只是想念'。',我已经更新了我的答案。 –

+0

没有,这不是我可以访问file1但myVar1的值为空的问题 – alexmngn

0

这是一种反模式取决于模块缓存和对象为提到这些问题,不管。

需要导入整个文件来获得引用,而不是实际的价值,所以你要做的:

import file1 from './file1' 

export default { 
    printVar() { 
    console.log(file1.myVar1) 
    } 
} 

这种方式ü不只是进口myVar1的价值,你导入到参考该对象,因此您可以修改对象内容并始终将其反射到处。

P.S.这不被推荐,并且不是很好的构图。

+0

我现在正在用JavaScript玩,我不是新的,但我想知道什么可能是不同的方式来实现这种类型的作品或如何以更好的方式实现它们。我试图导入整个文件,不幸的是,这仍然不适用于我的情况。 – alexmngn

+0

构图是“构图是将两个或多个功能结合起来以产生新功能的过程。将功能组合在一起就像将一系列管道连接在一起以供我们的数据流过。”阅读此https://medium.com/javascript-scene/master-the-javascript-interview-what-is-function-composition-20dfb109a1a0 – Bamieh

+0

我现在主要查看工厂模式:https://developers.caffeina .com/object-composition-patterns-in-javascript-4853898bb9d0 – alexmngn