亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我好像沒有找到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 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號