在通过 vuex 进行数据共享的时候都知道,vuex有一个 响应式的特性,如果组件中想要使用vuex中的共享数据,但是在某一情况下 需要改变这个数据,并且还 不能影响其他 使用该数据 的组件时,就可以通过深拷贝来实现,深拷贝会重新开辟一块 内存 ,存放对应的数据,改变之后不会影响原来的数据,下面是通过 递归 实现的深拷贝:
function deepCopy(new_o, old_obj) {
for (var k in old_obj) {
// 判断属于那种数据类型
// 1 获取属性值
var item = old_obj[k] //值
// 2 判断这个值是否是数组
if (item instanceof Array) {
//instanceof 属于
new_o[k] = [] // get_o.k 属性名
deepCopy(new_o[k], item) // 递归,把item给new_o[k]
// 3 判断这个值是否是对象
} else if (item instanceof Object) {
new_o[k] = {}
deepCopy(new_o[k], item)
// 4 属于简单数据类型
} else {
new_o[k] = item
}
}
}
除此之外还能够通过:JSON对象实现深拷贝,和 使用assign 进行拷贝