为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2023-04-19 19:15:40
最近在写程序的时候发现,如果在函数参数中传递一个object对象,如果我在函数内部改变了这个对象的字段值,那么这个对象也会随之改变,看来对于对象来说函数参数传递的是一个引用。那么js里是否有方便的clone对象方法呢?我好像没有找到clone关键字支持,对象内部也没有clone方法,jQuery的$.clone方法也不能用在普通对象上,有这样的方法吗?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

深拷贝需要考虑的因素非常多,比如

  • 传入的是普通的{}对象还是由构造函数生成的对象

  • 如果由构造函数生成是否拷贝原型链上的属性

  • 处理循环引用(包括自身引用)

这里写出一个基本的深拷贝方案。只处理基本的{}对象,同时也处理Array,RegExp,Date,并解决循环引用问题。


查看完整回答
反对 回复 2023-04-22
?
饮歌长啸

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


查看完整回答
反对 回复 2023-04-22
?
月关宝盒

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;  
}


查看完整回答
反对 回复 2023-04-22
  • 3 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信