美文网首页
浅谈浅复制和深复制

浅谈浅复制和深复制

作者: 一枚程序员的灵感 | 来源:发表于2017-09-29 17:10 被阅读9次

    1,首先谈一下js的数据类型大致分为两大块:

    • 基本数据类型

      string
      
      number 
      
      boolean
      
       ....
      
    • 复杂数据类型

      object
      
      array
      

    2,而浅拷贝和深拷贝只针对这类复杂数据的类型。

    • 说到浅拷贝想到:
      ....
      Object.assign(目标对象,拷贝对象1,...,拷贝对象n)
    
      例子:
    
      var target= {x: 3, y: 2, z: 1};
    
      var copy1 = {a: 1, b: 2, c: {cc: "x", bb: "y", aa: "z", dd: "dd"}};
    
      var copy2 = {a: 2, b: 3, c: {cc: "aa", bb: "bb", aa: "cc"}};
    
      var result = Object.assign(sum, copy1, copy2);
    
    
      console.log(target) //  {x: 3, y: 2, z: 1, a: 2, b: 3, c:{ aa: "cc",bb: "bb", cc: "aa"  }}
    
      
      target===result     //true
    
    
      可见copy2中子对象没有拷贝下来。这就叫 浅拷贝。
    
    • 说到深拷贝想到:
      ....
     jQuery中的$.extend("boolean",目标对象,拷贝对象1,...,拷贝对象n);
    
     >>为true:深拷贝
    
      例子:
    
      var target= {x: 3, y: 2, z: 1};
    
      var copy1 = {a: 1, b: 2, c: {cc: "x", bb: "y", aa: "z", dd: "dd"}};
    
      var copy2 = {a: 2, b: 3, c: {cc: "aa", bb: "bb", aa: "cc"}};
    
      var result = $.extend(sum, copy1, copy2);
    
    
      console.log(target) //  {x: 3, y: 2, z: 1, a: 2, b: 3, c:{ aa: "cc",bb: "bb", cc: "aa",dd: "dd" }}
    
    
      可见copy1 和copy2 中所有属性值(包括子对象的属性值)都拷贝了下来,这就是深拷贝。
    

    3,不知道为什么总觉得call、apply 和浅拷贝、深拷贝有点关系。那就研究一下吧。

    ·用法:a.call(b,1,2)  a.apply(b,[1,2])
    
    ·理解:把a对象身上的属性和方法冒充到b对象身上。
    
    ·作用:用来动态改变this的指向。
    
        例子:
    
          function add(a, b){
      
             console.dir(this);
           
          } 
    
          function sub(a, b){
    
             console.dir(this);
    
          }
    
          add(1,2);
    
          >> "Window"
    
          sub(1,2);
    
          >> "Window"
    
          add.call(sub, 1, 2);
    
          >> "sub(a, b)"
    
          sub.apply(add, [1, 2]);
    
          >> "add(a, b)"
    
    ·区别:
    
          >>传参方式不同
    
            1,call是连续传参
    
            2,apply是数组传参
    

    ---end.

    相关文章

      网友评论

          本文标题:浅谈浅复制和深复制

          本文链接:https://www.haomeiwen.com/subject/fogiextx.html