我在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 :(得分:2)
绝对应该是“参考”。我建立了一个JsFiddle确认。
在JavaScript中实际上不可能使用结构。有明确的价值和参考类型。所有对象都被视为引用类型。
答案 1 :(得分:2)
如果您通过更改其属性(例如,通过执行imgStrc
)来修改imgStrc.id = 42
,则将 更改$.myNameSpace.matrixPos[row][column]
中的对象(因为它是实际上是同一个对象)。
只有通过重新分配来修改imgStrc
,它才会。除了设置$.myNameSpace.matrixPos[row][column] = imgStrc
或将整个事物包装成包装器对象(或单元素数组)之外,没有办法“修复”这个。
答案 2 :(得分:1)
您可以直接修改对象:
$.myNameSpace.matrixPos[row][column].someMethod();
这是不方便的,或者在修改后将值反馈给数组:
var tmp = $.myNameSpace.matrixPos[row][column];
tmp.someMethod(); // Do something...
$.myNameSpace.matrixPos[row][column] = tmp;
答案 3 :(得分:1)
JavaScript没有指针。最后一个var语句只是用namespace属性的值覆盖imgStrc值。无论那个价值是什么,你修改了什么。如果它是一个对象,那么对该obj的所有引用都将看到更改。