繁体   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