为什么要有克隆方法呢?因为JS中的对象赋值不像C,C++那样,新开辟一个空间,而是直接指向那个对象的引用,两个值会互相影响。
如下图:
克隆对象的方法
1.如果是对象,得将其属性一个一个赋值过去
clone: function(obj){
if(this.isArray(obj)){
var arr = [];
for(var i = 0; i < obj.length; i++){
arr.push(this.clone(obj[i]));
}
return arr;
}
if(!this.isObject(obj)) return obj;
if(obj == null) return obj;
var myNewObj = new Object();
for(var i in obj){
myNewObj[i] = this.clone(obj[i]);
}
return myNewObj;
}
2.用JSON的形式,生成JSON,复制,然后转为新的对象。
clone: function(obj){
var json = JSON.stringify(obj);
var newObj = JSON.parse(json);
return newObj;
}
然后数组的话,还可以用数组自己的方法arr.splice(0)或arr.concat();就完成了复制。
JQuery的方法:
深复制【可以迭代】:var newJson = jQuery.extend(true,{}, json,...);
浅复制【不能迭代】:var newJson = jQuery.extend({}, json,...);
var newJson = $.map(json,function (n) { return n; });