對象合并
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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/106552.html
摘要:接下來就讓我們更細(xì)致的探究中的深淺拷貝??偨Y(jié)以上對深拷貝和淺拷貝做了簡單的介紹,在深拷貝的實(shí)現(xiàn)上也只介紹了最簡單的實(shí)現(xiàn)形式,并未考慮復(fù)雜情況以及相應(yīng)優(yōu)化,想要對深拷貝有更深入的了解,需要大家花時間去深入研究,或者可以關(guān)注我后續(xù)文章的動態(tài)。 對象和數(shù)組的拷貝對我來說一直都是一個比較模糊的概念,一直有點(diǎn)一知半解,但是在實(shí)際工作中又偶爾會涉及到,有時候還會一不小心掉坑里,不知道大家有沒有同樣...
摘要:而引用類型值是指那些保存堆內(nèi)存中的對象,意思是變量中保存的實(shí)際上只是一個指針,這個指針指向內(nèi)存中的另一個位置,該位置保存對象。而堆內(nèi)存主要負(fù)責(zé)對象這種變量類型的存儲。我們需要明確一點(diǎn),深拷貝與淺拷貝的概念只存在于引用類型。 深拷貝和淺拷貝 說起深拷貝和淺拷貝,首先我們來看兩個栗子 // 栗子1 var a = 1,b=a; console.log(a); console.log(b) ...
摘要:內(nèi)存空間分為兩種,棧內(nèi)存與堆內(nèi)存棧是系統(tǒng)自動分配的內(nèi)存空間,由系統(tǒng)自動釋放,堆則是動態(tài)分配的內(nèi)存,大小不定不會自動釋放。 JavaScript的內(nèi)存空間 在JavaScript中,每一個數(shù)據(jù)都需要一個內(nèi)存空間。內(nèi)存空間分為兩種,棧內(nèi)存(stack)與堆內(nèi)存(heap) 棧是系統(tǒng)自動分配的內(nèi)存空間,由系統(tǒng)自動釋放,堆則是動態(tài)分配的內(nèi)存,大小不定不會自動釋放。 基本數(shù)據(jù)類型 JavaScr...
摘要:關(guān)于深拷貝和淺拷貝從原理看淺拷貝拷貝一層,對象級別的則拷貝引用深拷貝拷貝多層,每個層級的屬性都會拷貝從現(xiàn)象看復(fù)制了,被修改后,隨變化而變化淺拷貝不變深拷貝深拷貝針對的復(fù)雜的類型數(shù)據(jù)如直接賦值的單層拷貝,如,雖然不受的影響,但是這也不算做 關(guān)于深拷貝和淺拷貝 從原理看: 淺拷貝:拷貝一層,對象級別的則拷貝引用 深拷貝:拷貝多層,每個層級的屬性都會拷貝 從現(xiàn)象看:A復(fù)制了B,B被修改后...
閱讀 4371·2021-09-24 10:24
閱讀 1561·2021-09-22 16:01
閱讀 2846·2021-09-06 15:02
閱讀 1183·2019-08-30 13:01
閱讀 1095·2019-08-30 10:52
閱讀 711·2019-08-29 16:36
閱讀 2338·2019-08-29 12:51
閱讀 2436·2019-08-28 18:29