對(duì)象的淺拷貝和深拷貝

對(duì)象的深拷貝和淺拷貝

//拷貝出來的結(jié)果 和以前沒關(guān)系 叫深拷貝
let school = { name: "王星星", age: 10 };
let my = { address: "回龍觀" };
let newObj = { ...school, ...my };
console.log(newObj);//{ name: '王星星', age: 10, address: '回龍觀' }
console.log(school)//{ name: '王星星', age: 10 }
newObj.age=20;//
console.log(newObj)//{ name: '王星星', age: 20, address: '回龍觀' }
console.log(school)//{ name: '王星星', age: 10 }

//...如果用的是多層對(duì)象 那就是淺拷貝
let school = { name: "王星星", age: 10 ,a:{b:2}};
let my = { address: "回龍觀" };
let newObj = { ...school, ...my };
console.log(newObj);//
console.log(school)//
newObj.a.b=20;//
console.log(newObj)//
console.log(school)//

如何 實(shí)現(xiàn)一個(gè)深拷貝 遞歸拷貝
1、外部庫(kù) lodash =>cloneDeep
2县钥、自實(shí)現(xiàn)

// 1) 怎么判斷數(shù)據(jù)的類型
// typeof object Array
// Object.prototype.toString.call()
// instanceof 可以判斷類型 判斷是誰的實(shí)例
// constructor 構(gòu)造函數(shù)

const deepClone = (value ,hash = new WeakMap) => {
    if(value == null) return value; // 排除掉null 和undefine 的情況
    if(typeof value !== 'object') return value; // 這里包含了函數(shù)類型
    if(value instanceof RegExp) return new RegExp(value);
    if(value instanceof Date) return new Date(value);
    // .....
    // 拷貝的人可能是一個(gè)對(duì)象 或者是一個(gè)數(shù)組 (循環(huán))  for in 
    let instance = new value.constructor; // 根據(jù)當(dāng)前屬性構(gòu)造一個(gè)新的實(shí)例
    if(hash.has(value)){ // 先去hash中查看一下是否存在過 椭坚,如果存在就把以前拷貝的返回去 
        return hash.get(value); // 返回已經(jīng)拷貝的結(jié)果
    }
    hash.set(value,instance);// 沒放過就放進(jìn)去
    // 用一個(gè)對(duì)象來記憶
    for(let key in value){ // 一層
        if(value.hasOwnProperty(key)){ // 將hash 繼續(xù)向下傳遞 保證這次拷貝能拿到以前拷貝的結(jié)果
            instance[key] = deepClone(value[key],hash); // 產(chǎn)生的就是一個(gè)新的拷貝后的結(jié)果
        }// 過濾掉原型鏈上的屬性
    }
    return instance
};


let school = {
    name: "老肥",
    age: 10,
    a: { b: {c:45} },
    fn: () => {},
    c: undefined,
    reg: /\d+/
  };

  let obj1 = deepClone(school);
  obj1.a.b.c="王菲"
  console.log(obj1);
  console.log(school)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驶臊,一起剝皮案震驚了整個(gè)濱河市籽暇,隨后出現(xiàn)的幾起案子局齿,更是在濱河造成了極大的恐慌澈段,老刑警劉巖悠菜,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異败富,居然都是意外死亡悔醋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門兽叮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芬骄,“玉大人猾愿,你說我怎么就攤上這事≌俗瑁” “怎么了蒂秘?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淘太。 經(jīng)常有香客問我姻僧,道長(zhǎng),這世上最難降的妖魔是什么蒲牧? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任撇贺,我火速辦了婚禮,結(jié)果婚禮上冰抢,老公的妹妹穿的比我還像新娘显熏。我一直安慰自己,他們只是感情好晒屎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布喘蟆。 她就那樣靜靜地躺著,像睡著了一般鼓鲁。 火紅的嫁衣襯著肌膚如雪蕴轨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天骇吭,我揣著相機(jī)與錄音橙弱,去河邊找鬼。 笑死燥狰,一個(gè)胖子當(dāng)著我的面吹牛棘脐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播龙致,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛀缝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了目代?” 一聲冷哼從身側(cè)響起屈梁,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榛了,沒想到半個(gè)月后在讶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霜大,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年构哺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片战坤。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡曙强,死狀恐怖残拐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旗扑,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布慈省,位于F島的核電站臀防,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏边败。R本人自食惡果不足惜袱衷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笑窜。 院中可真熱鬧致燥,春花似錦、人聲如沸排截。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽断傲。三九已至脱吱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間认罩,已是汗流浹背箱蝠。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垦垂,地道東北人宦搬。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像劫拗,于是被迫代替她去往敵國(guó)和親间校。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容