簡體   English   中英

Object 數組:引用現有對象或新實例

[英]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 來確認。

http://jsfiddle.net/bJaL4/

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM