對(duì)象合并
Object.defineProperty(Object, "myAssign", { configurable: true, enumerable: true, writable: false, value: function() { if (arguments[0] === undefined) { throw Error("dest can not be undefined"); } let rest = Array.prototype.slice.call(arguments, 1); Array.prototype.forEach.call(rest, function(source) { Object.getOwnPropertyNames(source).forEach(function(prop) { Object.defineProperty(arguments[0], prop, { configurable: true, enumerable: true, writable: true, value: source[prop] }); }); }); } });
淺復(fù)制
Object.defineProperty(Object, "shallowClone", { configurable: true, enumerable: true, writable: false, value: function(dest, source) { if (dest === undefined) { throw Error("dest can not be undefined"); } Object.getOwnPropertyNames(source).forEach(function(prop) { Object.defineProperty(dest, prop, { configurable: true, enumerable: true, writable: true, value: source[prop] }); }); } });
深復(fù)制
Object.defineProperty(Object, "deepClone", { configurable: true, enumerable: true, writable: false, value: function(dest, source) { if (dest === undefined || source === undefined) { throw Error("dest can not be undefined"); } if (!(source instanceof Object)) { throw Error(source, "is not a object"); } Object.getOwnPropertyNames(source).forEach(function(prop) { if (typeof source[prop] === Object) { Object.deepClone(dest[prop], source[prop]); } else { dest[prop] = source[prop]; } }); } });
const a = { x: 1, y: 2, z: { m: 3, n: 4 } } const b = { r: 4, s: 5, z: { m: 5, n: 6 } } Object.deepClone(a, b); console.log(a); b.z.m = 12; console.log(a);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106552.html
摘要:接下來就讓我們更細(xì)致的探究中的深淺拷貝??偨Y(jié)以上對(duì)深拷貝和淺拷貝做了簡(jiǎn)單的介紹,在深拷貝的實(shí)現(xiàn)上也只介紹了最簡(jiǎn)單的實(shí)現(xiàn)形式,并未考慮復(fù)雜情況以及相應(yīng)優(yōu)化,想要對(duì)深拷貝有更深入的了解,需要大家花時(shí)間去深入研究,或者可以關(guān)注我后續(xù)文章的動(dòng)態(tài)。 對(duì)象和數(shù)組的拷貝對(duì)我來說一直都是一個(gè)比較模糊的概念,一直有點(diǎn)一知半解,但是在實(shí)際工作中又偶爾會(huì)涉及到,有時(shí)候還會(huì)一不小心掉坑里,不知道大家有沒有同樣...
摘要:而引用類型值是指那些保存堆內(nèi)存中的對(duì)象,意思是變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針指向內(nèi)存中的另一個(gè)位置,該位置保存對(duì)象。而堆內(nèi)存主要負(fù)責(zé)對(duì)象這種變量類型的存儲(chǔ)。我們需要明確一點(diǎn),深拷貝與淺拷貝的概念只存在于引用類型。 深拷貝和淺拷貝 說起深拷貝和淺拷貝,首先我們來看兩個(gè)栗子 // 栗子1 var a = 1,b=a; console.log(a); console.log(b) ...
摘要:深拷貝和淺拷貝深拷貝和淺拷貝的示意圖大致如下淺拷貝只復(fù)制指向某個(gè)對(duì)象的指針,而不復(fù)制對(duì)象本身,新舊對(duì)象還是共享同一塊內(nèi)存。參考文章什么是深拷貝和淺拷貝及其實(shí)現(xiàn)方式 走在前端的大道上 本篇將自己讀過的相關(guān)文章中,對(duì)自己有啟發(fā)的章節(jié)片段總結(jié)在這(會(huì)對(duì)原文進(jìn)行刪改),會(huì)不斷豐富提煉總結(jié)更新。 淺拷貝 var m = { a: 10, b: 20 } var n = m; n.a = 15; ...
摘要:內(nèi)存空間分為兩種,棧內(nèi)存與堆內(nèi)存棧是系統(tǒng)自動(dòng)分配的內(nèi)存空間,由系統(tǒng)自動(dòng)釋放,堆則是動(dòng)態(tài)分配的內(nèi)存,大小不定不會(huì)自動(dòng)釋放。 JavaScript的內(nèi)存空間 在JavaScript中,每一個(gè)數(shù)據(jù)都需要一個(gè)內(nèi)存空間。內(nèi)存空間分為兩種,棧內(nèi)存(stack)與堆內(nèi)存(heap) 棧是系統(tǒng)自動(dòng)分配的內(nèi)存空間,由系統(tǒng)自動(dòng)釋放,堆則是動(dòng)態(tài)分配的內(nèi)存,大小不定不會(huì)自動(dòng)釋放。 基本數(shù)據(jù)類型 JavaScr...
摘要:關(guān)于深拷貝和淺拷貝從原理看淺拷貝拷貝一層,對(duì)象級(jí)別的則拷貝引用深拷貝拷貝多層,每個(gè)層級(jí)的屬性都會(huì)拷貝從現(xiàn)象看復(fù)制了,被修改后,隨變化而變化淺拷貝不變深拷貝深拷貝針對(duì)的復(fù)雜的類型數(shù)據(jù)如直接賦值的單層拷貝,如,雖然不受的影響,但是這也不算做 關(guān)于深拷貝和淺拷貝 從原理看: 淺拷貝:拷貝一層,對(duì)象級(jí)別的則拷貝引用 深拷貝:拷貝多層,每個(gè)層級(jí)的屬性都會(huì)拷貝 從現(xiàn)象看:A復(fù)制了B,B被修改后...
閱讀 4118·2021-09-24 10:24
閱讀 1439·2021-09-22 16:01
閱讀 2752·2021-09-06 15:02
閱讀 1051·2019-08-30 13:01
閱讀 1034·2019-08-30 10:52
閱讀 656·2019-08-29 16:36
閱讀 2266·2019-08-29 12:51
閱讀 2375·2019-08-28 18:29