-
17-09-2020 - |
题
我刚刚发现了困难的方法,对象通过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
中一样使对象的深度副本是单独的。
不隶属于 StackOverflow