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