我有一個一般的JavaScript問題。傳遞對象與ID
比方說,我有一個persons
的Person
對象。每個Person
有一個ID,名稱,地址等。
在我的功能,處理persons
,我通常通過我操縱的Person
對象。然而,這不知何故感覺不對。就像我在浪費記憶。
所以我的問題:使用額外的內存通過傳遞的對象,而不僅僅是他們的ID我
- 是誰?
- 正在使用getPersonByID(),只是傳遞ID而不是一個更好的選擇?
- 如何管理對象的許多實例?
我有一個一般的JavaScript問題。傳遞對象與ID
比方說,我有一個persons
的Person
對象。每個Person
有一個ID,名稱,地址等。
在我的功能,處理persons
,我通常通過我操縱的Person
對象。然而,這不知何故感覺不對。就像我在浪費記憶。
所以我的問題:使用額外的內存通過傳遞的對象,而不僅僅是他們的ID我
我使用額外的內存通過傳遞的對象,而不是他們的ID?
不,您正在傳遞對象的引用,而不是每次都傳遞它的副本。因此,正在使用沒有額外的內存,每次通過圍繞一個person
對象的時間......所以,當你問:
是使用getPersonByID()和剛好路過的ID,而不是更好的選擇?
不是真的,因爲您只需添加必須通過您的人員列表並重新檢索對象的開銷。
如何管理對象的許多實例?
這取決於很多事情,如範圍,誰引用等。我建議你看看how JS garbage collection and memory management works有一個更好的理解。
感謝您的回答。所以,即使我有以下內容: – whateverforever
因此,即使我有以下內容: var members = []; var activeMembers = []; members.push(new Person()); members.push(new Person()); activeMembers.push(members [0]); 內存只能容納 *'members'object *'activeMembers'對象 *和兩個'Person'對象 對嗎?這很酷。 – whateverforever
對不起,我以爲塊代碼可以工作。無論如何,感謝您的幫助 – whateverforever
JavaScript中的對象「值」是參考文獻。將對象傳遞給函數將引用傳遞給對象,並且不會比傳遞字符串(如id值)或數字更昂貴。
換句話說:傳遞或分配對象值而不是涉及複製對象。
在JavaScript中,對象(對象文字,數組和函數)都是通過引用傳遞的。當你將對象傳遞給一個函數時,你不會像通常在C/C++中那樣複製它。而是傳遞一個引用(基本上是對象的第二個名稱)。
function func(object) { object.changed = true; }
let a = {};
func(a);
console.log(a.changed); //true
對對方傳遞一個ID將更加詳細,它實際上創建了額外的開銷,這真的取決於你如何想設計自己的應用程序。
在JS中,你沒有傳遞你傳遞對象的引用的對象,所以在內存方面沒有什麼大不了的。 – Redu
[JavaScript是傳遞引用還是傳值語言?](http://stackoverflow.com/q/518000/1529630) – Oriol