JS进阶系列 --- 深拷贝和浅拷贝

基本概念

深拷贝和浅拷贝是基于引用类型而言的,且该引用中含有引用的属性
拷贝不是赋值

值赋值和地址赋值

var a = 2;
var b = a;

这是值赋值,变量a和b都存储了值2,互不影响。

var a = {age:18};
var b = a;

这是地址赋值,变量a和b都存储了内存xxx的地址,内存xxx存储的值是age:18

在下面这段代码中,定义了一个对象car指向内存xxx,值为name:”法拉利”,
定义了一个对象p1指向内存xxx,值为{age:18,name:”小红”,car:car}

var car = {name:"法拉利"};
var p1 = {
    age:18,
    name:"小红",
    car:car
}

浅拷贝

function easyCopy(){
     
    var temp = {};
    for(var k in this){
        temp[k] = this[k]
    }
    return temp
}
var p2 = p1.easyCopy();
//结果是p2与p1的各值类型属性都是独立的,但是共享一辆车

深拷贝

这里利用了递归实现

function deepCopy(){
     
    var temp = {};
    for(var k in this){
        if(typeof this[k] === 'Object') //如果是引用类型
            temp[k] = this[k].deepCopy();
        else
            temp[k] = this[k]
    }
    return temp
}
var p2 = p1.copy();
//结果是p2与p1的各属性都是独立的

你可能感兴趣的:(JS进阶,js进阶,javascript,javascript面向对象,前端,js高级)