Javascript深拷贝 浅拷贝

Javascript深拷贝 浅拷贝

代码实现
<!DOCTYPE html>
<html>
<head>
    <title>深拷贝  浅拷贝</title>
</head>
<body>
    


<script>

    let obj={
        name:"lyh",
        age:20,
        
    }
    let hd=Object.assign({},obj);  //浅拷贝
    let hd={...obj};    //浅拷贝
    hd.name="Lyh";
    // console.log(JSON.stringify(hd,null,2));
    // console.log(JSON.stringify(obj,null,2));

    let objc={
        name:"ly",
        age:18,
        show:{
            title:"( $ _ $ )"
        },
        arr:[]
    }
    //深拷贝 就是 有多层的类型  属性有对象  有数组    属性是对象 需要类似与递归法

    function copy(obj) {
        let res=obj instanceof Array ? [] :  {}; //判断传入的类型 并选择接收的类型
        for (const [k,v] of Object.entries(obj)) {    //运用object.entries 属性给obj对象 变成 有索引 有值的 数组; 然后用解构 进行 key 和value 的赋值;
            res[k]= typeof v=="object"?copy(v):v; //判断属性值 是不是对象类型 是对象 重新调用一遍 赋值;
        } 
        return res;
    }

    let xj=copy(objc);
    console.log(JSON.stringify(objc,null,2));
    console.log(JSON.stringify(xj,null,2));
    //工厂函数

    function user(name,age) {
        return{
            name,
            age,
            show(){
                console.log(this.name+this.age)
            }
        }
    }
    let lyh=new user("Lyh",20);
    lyh.show();
    // user("Lyh",20).show();
    
// 构造函数
    function User(name,age) {
        this.name=name;
        this.age=age;
        this.showtime=function(){
           console.log(this.name+this.age);
        };
    }
  let ly=new User("Lyh",18);
  ly.showtime();

  function User1(name,age) {
      let date={name,age};
      let info=function () {
          return date.age>50?"中年":"青年";
      };
      this.show=function(){
          return console.log(info());
      }
  }
let l1=new User1("Lyh",18);
l1.show();
</script>
</body>
</html>
  • 3
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值