[英]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.