我好像没有找到clone关键字支持,对象内部也没有clone方法,怎么办?

最近在写程序的时候发现,如果在函数参数中传递一个object对象,如果我在函数内部改变了这个对象的字段值,那么这个对象也会随之改变,看来对于对象来说函数参数传递的是一个引用。

那么js里是否有方便的clone对象方法呢?我好像没有找到clone关键字支持,对象内部也没有clone方法,jQuery的$.clone方法也不能用在普通对象上,有这样的方法吗?


米琪卡哇伊
浏览 107回答 3
3回答

缥缈止盈

深拷贝需要考虑的因素非常多,比如传入的是普通的{}对象还是由构造函数生成的对象如果由构造函数生成是否拷贝原型链上的属性处理循环引用(包括自身引用)这里写出一个基本的深拷贝方案。只处理基本的{}对象,同时也处理Array,RegExp,Date,并解决循环引用问题。

饮歌长啸

可以使用 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

月关宝盒

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;   }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript