对象数组:对现有对象或新实例的引用

时间:2011-06-04 19:15:55

标签: javascript pointers object

我在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]中的对象不会反映这些更改。

有没有办法'修复'这个?

4 个答案:

答案 0 :(得分:2)

绝对应该是“参考”。我建立了一个JsFiddle确认。

http://jsfiddle.net/bJaL4/

在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的所有引用都将看到更改。