1、將對(duì)象轉(zhuǎn)換為JSON字符串形式,再將其轉(zhuǎn)換為原生JS對(duì)象;
專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
//_tmp和result是相互獨(dú)立的,沒(méi)有任何聯(lián)系,有各自的存儲(chǔ)空間。 let deepClone = function (obj) { let _tmp = JSON.stringify(obj);//將對(duì)象轉(zhuǎn)換為json字符串形式 let result = JSON.parse(_tmp);//將轉(zhuǎn)換而來(lái)的字符串轉(zhuǎn)換為原生js對(duì)象 return result; }; let obj1 = { weiqiujaun: { age: 20, class: 1502 }, liuxiaotian: { age: 21, class: 1501 } }; let test = deepClone(obj1); console.log(test);
2、使用JS中的for循環(huán)實(shí)現(xiàn)遍歷和復(fù)制;
function deepClone(obj) { let result = typeof obj.splice === "function" ? [] : {}; if (obj && typeof obj === 'object') { for (let key in obj) { if (obj[key] && typeof obj[key] === 'object') { result[key] = deepClone(obj[key]);//如果對(duì)象的屬性值為object的時(shí)候,遞歸調(diào)用deepClone,即在吧某個(gè)值對(duì)象復(fù)制一份到新的對(duì)象的對(duì)應(yīng)值中。 } else { result[key] = obj[key];//如果對(duì)象的屬性值不為object的時(shí)候,直接復(fù)制參數(shù)對(duì)象的每一個(gè)鍵值到新的對(duì)象對(duì)應(yīng)的鍵值對(duì)中。 } } return result; } return obj; } let testArray = ["a", "b", "c", "d"]; let testRes = deepClone(testArray); console.log(testRes); console.log(typeof testRes[1]); let testObj = { name: "weiqiujuan", sex: "girl", age: 22, favorite: "play", family: {brother: "son", mother: "haha", father: "heihei"} }; let testRes2 = deepClone(testObj); testRes2.family.brother = "weibo"; console.log(testRes2);
3、利用數(shù)組的“Array.prototype.forEach”方法進(jìn)行復(fù)制即可實(shí)現(xiàn)深拷貝。
let deepClone = function (obj) { let copy = Object.create(Object.getPrototypeOf(obj)); let propNames = Object.getOwnPropertyNames(obj); propNames.forEach(function (items) { let item = Object.getOwnPropertyDescriptor(obj, items); Object.defineProperty(copy, items, item); }); return copy; }; let testObj = { name: "weiqiujuan", sex: "girl", age: 22, favorite: "play", family: {brother: "wei", mother: "haha", father: "heihei"} } let testRes2 = deepClone(testObj); console.log(testRes2);
以上就是JS 深拷貝的三種實(shí)現(xiàn)方式的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!