有趣的是,這與另一個最近的問題非常相似,儘管不是很愚蠢。
設置一個數據結構,試圖在不同的組件中使用這樣的引用來處理這個數據結構是一條黑暗的道路。如果你只是在討論一些代碼,這很有趣,但是在一個已部署的應用程序中,這很麻煩。
您最好創建一個結構,在該結構中,組件進行更改並將模型更改寫入該模型,然後模型廣播「髒數據」事件(或任何您想調用它的內容)包含註冊偵聽器(例如其他組件)正在偵聽的新數據。他們收到數據有效載荷並使用它。
對於希望按需提供數據的組件,您可以注入服務/訪問單例/您的框架執行的任何操作,並通過getter或某種簡單工廠函數訪問它。
您正在做的事情越來越多地讓對象發生變化。傳遞有問題的對象的不可變(或至少是複製的)版本更好。這樣,如果該對象發生變化,很容易找出在哪裏以及爲什麼。如果所有事情都有實際的參考(正如你上面看到的那樣,通常不會),對他們中的任何一個人的小改變都可能破壞你的早晨。
複製對象,如果你想知道,並不難。您可以複製對象只是這樣(假設它包含基本對象,基本類型等)
let myNewObj = Object.assign ({}, myOldObj);
let myNewArr = [].concat (myOldArr);
該對象是否具有類似的事情在他們的對象等數組,你可以深深這個老把戲複製:
let myFancyObjJSON = JSON.stringify (myFancyObj)
let copy = JSON.parse (myFancyObjJSON)
作品絕大多數的時間,除非你的類型是不典型(如地圖與符號的定義忽略了這些鍵的鍵)和其他一些未經常遇到的一天到一天的情況。
相信我,從經驗,重新思考你的結構(再次,除非這只是一個實驗)。
有**是沒有**傳遞通過引用在JavaScript中。術語「通過引用」在編程中具有特定的含義(這是「藝術術語」):將引用*傳遞給變量*到函數中。 JavaScript沒有。 –
上面你正在做的是將一個對象引用傳遞給一個函數(按值,該值是對象引用)。 –
不,是(但正如TJ所說,「指針」是值),沒有...... – RobG