[英]Object array: reference to existing objects or new instances
我在 JavaScript 中有以下結構(或 class?):
function ImageStruct() {
this.id = -1;
this.isCover = true;
this.isPaired = false;
this.row = -1;
this.column = -1;
}
我將此 class 添加到二維數組中。
var imgStruct = new ImageStruct();
imgStruct.id = id;
imgStruct.row = row;
imgStruct.column = column;
$.myNameSpace.matrixPos[row][column] = imgStruct;
當我做這樣的事情時:
var imgStrc = $.myNameSpace.matrixPos[row][column];
如果我修改imgStrc
, $.myNameSpace.matrixPos[row][column]
中的 object 不會反映該更改。
有沒有什么辦法解決這一問題?
它絕對應該是“通過引用”。 我設置了一個 JsFiddle 來確認。
JavaScript 中的結構實際上是不可能的。 有明確的值和引用類型。 所有對象都被視為引用類型。
如果您通過更改imgStrc
的屬性來修改它(例如通過執行imgStrc.id = 42
),該更改將影響$.myNameSpace.matrixPos[row][column]
中的 object (因為它實際上是同一個對象)。
僅當您通過重新分配imgStrc
來修改它時,它才不會。 除了設置$.myNameSpace.matrixPos[row][column] = imgStrc
或將整個東西包裝到包裝器 object (或單元素數組)中之外,沒有辦法“修復”這個問題。
您可以直接修改 object:
$.myNameSpace.matrixPos[row][column].someMethod();
誠然這不是很方便,或者在修改后將值反饋回數組:
var tmp = $.myNameSpace.matrixPos[row][column];
tmp.someMethod(); // Do something...
$.myNameSpace.matrixPos[row][column] = tmp;
JavaScript 沒有指針。 您最后的 var 語句只是用命名空間屬性的值覆蓋了 imgStrc 值。 無論該值是什么,都是您修改的值。 如果它是 object,則對該 obj 的所有引用都會看到更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.