js——个人对对象深度克隆的理解,以及ES6中的深度克隆的实现

    科技2022-07-31  91

    克隆的概念

    克隆分为两种:深克隆和浅克隆 深克隆 所有元素或属性完全复制,与原对象完全脱离,也就是说所有对新对象的修改都不会映射到原对象中

    浅克隆 原始类型为值传递,对象类型仍为引用传递,所以改变新对象中的引用值会改变原对象中

    简要介绍:js中的对象的赋值,其实是实现了对象的引用,在赋值对象上修改属性会影响到原来的对象。

    –ES5中我们可以通过递归函数来实现深层次的克隆。 –ES6中我们可以通过Object.assign的方式来实现深度克隆。

    1.javascript(ES5)中对象的克隆

    function deepClone(obj){ var newObj= obj instanceof Array?[]:{}; for(var i in obj){ newObj[i]=typeof obj[i]=='object'? deepClone(obj[i]):obj[i]; } return newObj; }

    缺点:不能实现包装类型比如通过new String()或者new Number()创建的对象的深度克隆

    2.ES6下的对象深度克隆

    (1)通过Object.assigin实现

    const deepClone=(obj)=>{ var proto=Object.getPrototypeOf(obj); return Object.assign({},Object.create(proto),obj); }

    通过Object.getPrototypeOf函数得到obj被克隆函数的原型上的属性,然后通过Object.assign实现深度克隆。

    (2)通过proto来实现(仅适合浏览器端)

    const deepClone=(obj)=>({ __proto__: Object.getPrototypeOf(obj), ...obj })

    通过扩展运算符…和proto属性来实现

    Processed: 0.012, SQL: 8