JavaScript 实现复杂对象深拷贝(对象值包含函数) |
您所在的位置:网站首页 › 深拷贝函数js › JavaScript 实现复杂对象深拷贝(对象值包含函数) |
以前对深拷贝和浅拷贝没有太深的印象,后来才知道是因为没掉进去过它的坑里。最近掉坑了才意识到它们的重要性。 闲话少叙,来说说坑:我保存了一个复杂的对象 obj 并把它赋值给 originalObj ,后来对该对象的某个属性值进行了修改,然后,,,我保存的初始值originalObj 也被修改了!!! 这个时候明眼人应该看出问题来了:因为我给originalObj 赋值的时候用的是浅拷贝,所以修改obj 的属性值的时候,originalObj 也跟着变了。这就是浅拷贝的直接表现。 那么 假如我想保存一份初始值originalObj ,不管 obj 怎么修改,都保持originalObj 始终不变,该怎么办呢?答案就是用深拷贝。。。 网上有很多方法,比如Object.assign()、JSON对象的parse和stringify、JQ的extend等,但是它们有一个共同的问题就是对简单对象可以实现深拷贝,但是对复杂对象就不行了,比如这样一个对象(属性值有函数、数组、复杂对象等): 我们来看看效果: let obj_2 = deepCopy(obj_1); console.log(obj_1); // 修改name属性之前,打印出来 name 也是 Edited obj_1.name = 'Edited'; console.log(obj_1); // 修改name属性之后,打印出来 name 是 Edited console.log(obj_2); // 由于是深拷贝,修改obj_1 的 name属性之前,不影响 obj_2 的 name 属性好了,这就是用函数实现复杂对象的深拷贝的一种方法,希望对您有所帮助! 个人微信公众号:侦探小禾子,闲聊育儿生活星座塔罗牌,野生法考通过者免费法律咨询,欢迎关注! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |