深度复制一个对象,看到很多种方法,最简单的是:
var newObject = JSON.parse(JSON.stringify(oldObject));
这样写有什么弊端吗?
var newObject = Object.create(oldObject);
oldObject = {a: 1, b: function() {}}
深拷贝不就好了么。
https://github.com/XadillaX/nbut-online-judge-v2/blob/master/util/functions.js#L7-L28
/**
* Deepin clone an object
* @param obj
* @returns {*}
*/
exports.cloneObject = function(obj) {
if(typeof obj === "object") {
if(util.isArray(obj)) {
var newArr = [];
for(var i = 0; i < obj.length; i++) newArr.push(obj[i]);
return newArr;
} else {
var newObj = {};
for(var key in obj) {
newObj[key] = this.cloneObject(obj[key]);
}
return newObj;
}
} else {
return obj;
}
};
一般情况下通过 JSON
来复制挺好的,代码写起来也方便——不过并不是所有环境都实现了 JSON
,这个需要考虑下。
通过 deep clone 一般都是有限定复制层次的,一般情况下不会无限层的复制下去。如果使用 JSON
方式来复制,通常不能控制层次。