2011-06-04 56 views
2

我在JavaScript下面的結構(或類):對象數組:參照現有對象或新實例

function ImageStruct() { 
    this.id = -1; 
    this.isCover = true; 
    this.isPaired = false; 
    this.row = -1; 
    this.column = -1; 
} 

我這個類添加到二維數組中。

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]對象不反映變化。

有什麼辦法來「修復」呢?

+0

相關:http://stackoverflow.com/questions/518000/is-javascript-is-a-pass-by-reference-or-pass-by-value-language – Orbling 2011-06-04 19:20:15

+0

'$ .myNameSpace.matrixPos [row] [column] = imgStrc'後修改它。 – Orbling 2011-06-04 19:24:03

+0

@Orbling:我知道這是一個可能的解決方案,但我想知道是否有另一個。感謝您的意見。 – VansFannel 2011-06-04 19:26:52

回答

2

如果通過更改其屬性(例如,通過做imgStrc.id = 42)修改imgStrc它,這一變化將影響$.myNameSpace.matrixPos[row][column]對象(因爲它實際上是在同一個對象)。只有

,如果你通過重新分配它修改imgStrc,它不會。沒有辦法來「修復」該,不是設置$.myNameSpace.matrixPos[row][column] = imgStrc或包裹整個事情成包裝對象(或一元件陣列)等。

1

您可以修改直接在物體:

$.myNameSpace.matrixPos[row][column].someMethod(); 

這是無可否認不是很方便,或修改它喂入後,該值返回到陣列:

var tmp = $.myNameSpace.matrixPos[row][column]; 

tmp.someMethod(); // Do something... 

$.myNameSpace.matrixPos[row][column] = tmp; 
2

它絕對應該是「引用」。我建立了一個JsFiddle來確認。

http://jsfiddle.net/bJaL4/

結構是不是真的有可能在JavaScript中。有明確的價值和參考類型。所有對象都被視爲引用類型。

1

JavaScript沒有指針。你最後var語句只是覆蓋與命名空間屬性的值的imgStrc值。無論那個價值是什麼,你修改了。如果它是一個對象,那麼所有對該對象的引用都會看到這個變化。