最近在写程序的时候发现,如果在函数参数中传递一个object对象,如果我在函数内部改变了这个对象的字段值,那么这个对象也会随之改变,看来对于对象来说函数参数传递的是一个引用。那么js里是否有方便的clone对象方法呢?我好像没有找到clone关键字支持,对象内部也没有clone方法,jQuery的$.clone方法也不能用在普通对象上,有这样的方法吗?
3 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
深拷贝需要考虑的因素非常多,比如
传入的是普通的{}对象还是由构造函数生成的对象
如果由构造函数生成是否拷贝原型链上的属性
处理循环引用(包括自身引用)
这里写出一个基本的深拷贝方案。只处理基本的{}对象,同时也处理Array,RegExp,Date,并解决循环引用问题。
饮歌长啸
TA贡献1951条经验 获得超3个赞
可以使用 jQuery 中的 extend 方法。
var o = {a: [1]};//浅拷贝var o1 = $.extend({}, o);console.log(o1.a === o.a); // true//深拷贝var o2 = $.extend(true, {}, o);console.log(o2.a === o.a); //false
月关宝盒
TA贡献1772条经验 获得超5个赞
JavaScript中对象拷贝分两种,浅拷贝与深拷贝,这里你提到的是深拷贝。
对于一个普通的字面量对象,可以这样简单拷贝:
function clone(myObj){ if(typeof(myObj) != 'object' || myObj == null) return myObj; var newObj = new Object(); for(var i in myObj){ newObj[i] = clone(myObj[i]); } return newObj; }
添加回答
举报
0/150
提交
取消