我刚刚发现了困难的方法,对象通过JavaScript中的引用传递,例如:

for(var layer = 0; layer < hudLayers['layers'].length; layer++){

    // Store the to-be-calculated values in this object
    var tempValues = hudLayers['layers'][layer];

    tempValues['name'] = 'test';
}
.

这将在夏天视频和hudlayers中更改值。 (似乎有点明显,但没有一点代码的帖子似乎如此赤身裸体。)

有什么快速的方法吗?

有帮助吗?

解决方案

这不是通过引用的示例(您不通过任何参数)。 但是,你是对的;分配对象不会进行深度副本。

您可以制作这样的对象的深度副本:

function deepCopy(obj) {
    if (typeof obj !== "object") return obj;
    if (obj.constructor === RegExp) return obj;

    var retVal = new obj.constructor();
    for (var key in obj) {
        if (!obj.hasOwnProperty(key)) continue;
        retVal[key] = deepCopy(obj[key]);
    }
    return retVal;
}
.

请注意,如果对象的构造函数具有任何副作用,则此代码将触发它们。

其他提示

在JavaScript中没有通过引用。通过引用访问对象,并将这些引用分配或传递按值传递,就像在Java

中一样

使对象的深度副本是单独的。

.tosource在mdn

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top