浅克隆

一. =

    const obj = {s: 1, t: 2}
    const obj2 = obj
    console.log(obj, obj2)//{s: 1, t: 2} {s: 1, t: 2}
    
    使用 = 时,它会将指针复制到它占用的内存空间。引用类型不包含值, 
    它们是指向内存中值的指针。

二.扩展运算符

const phone = {apple: 'good', huwei: 'verygood'}
    const clonePone = {...phone}
    console.log(clonePone)//{apple: "good", huwei: "verygood"}
   使用它,则需要使用Babel(或类似的东西)进行编译。

三.使用 Object.assign
<是一个修改并返回目标对象的函数>

  const eat = {apple: 'green', orange: 'yellow'}
    const cloneEat = Object.assign({}, eat) // 将eat里面的东西 重新赋值给一个空对象
    console.log(cloneEat)//{apple: "green", orange: "yellow"}

深克隆

1 JSON.stringify/parse: 仅对数字、字符串和不含函数和 Symble 属性的对象有效

 const city = {
      shanghai: 'sh',
      where: {
        shenzhen: 'sz'
      }
    }
    const deepClone = JSON.parse(JSON.stringify(city))
    console.log(deepClone)

2 deepClone: 对所有类型有效,函数和 Symble 会通过引用复制

  var Point = function (x) {
      this.x = x
    }

    Point.prototype.y = 2

    var obj = new Point(1)

    var copy = Object.assign({ __proto__: obj.__proto__ }, obj) // 输出{x:1,y:2}
    copy.x=5
    console.log(copy)
    console.log(Point)

clipboard.png

参考:https://segmentfault.com/a/11...


HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!