对象合并
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);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/106552.html
摘要:接下来就让我们更细致的探究中的深浅拷贝。总结以上对深拷贝和浅拷贝做了简单的介绍,在深拷贝的实现上也只介绍了最简单的实现形式,并未考虑复杂情况以及相应优化,想要对深拷贝有更深入的了解,需要大家花时间去深入研究,或者可以关注我后续文章的动态。 对象和数组的拷贝对我来说一直都是一个比较模糊的概念,一直有点一知半解,但是在实际工作中又偶尔会涉及到,有时候还会一不小心掉坑里,不知道大家有没有同样...
摘要:而引用类型值是指那些保存堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。而堆内存主要负责对象这种变量类型的存储。我们需要明确一点,深拷贝与浅拷贝的概念只存在于引用类型。 深拷贝和浅拷贝 说起深拷贝和浅拷贝,首先我们来看两个栗子 // 栗子1 var a = 1,b=a; console.log(a); console.log(b) ...
摘要:内存空间分为两种,栈内存与堆内存栈是系统自动分配的内存空间,由系统自动释放,堆则是动态分配的内存,大小不定不会自动释放。 JavaScript的内存空间 在JavaScript中,每一个数据都需要一个内存空间。内存空间分为两种,栈内存(stack)与堆内存(heap) 栈是系统自动分配的内存空间,由系统自动释放,堆则是动态分配的内存,大小不定不会自动释放。 基本数据类型 JavaScr...
摘要:关于深拷贝和浅拷贝从原理看浅拷贝拷贝一层,对象级别的则拷贝引用深拷贝拷贝多层,每个层级的属性都会拷贝从现象看复制了,被修改后,随变化而变化浅拷贝不变深拷贝深拷贝针对的复杂的类型数据如直接赋值的单层拷贝,如,虽然不受的影响,但是这也不算做 关于深拷贝和浅拷贝 从原理看: 浅拷贝:拷贝一层,对象级别的则拷贝引用 深拷贝:拷贝多层,每个层级的属性都会拷贝 从现象看:A复制了B,B被修改后...
阅读 3948·2021-09-24 10:24
阅读 1384·2021-09-22 16:01
阅读 2713·2021-09-06 15:02
阅读 1013·2019-08-30 13:01
阅读 1002·2019-08-30 10:52
阅读 631·2019-08-29 16:36
阅读 2231·2019-08-29 12:51
阅读 2332·2019-08-28 18:29