2017-06-01 41 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