zoukankan      html  css  js  c++  java
  • js克隆

    js克隆一个对象

     

    我们知道,对象类型在赋值的过程中其实是复制了地址,所以如果改变了一方,其他都会被改变。我们应该如何克隆一个对象,并且避免这种现象的发生呢?

    方法一:Object.assign

    function copy(obj){
        return Object.assign({}, obj);
    }

    方法二:…展开运算符

    function copy(obj){
        return { …obj };
    }
    方法一,方法二是浅拷贝,也就是当对象层级大于2层时,复制到的还是地址信息
    let a = {age:1,
             jobs: {first:'FE’} 
            }
    let b = copy(a) 
    a.jobs.first =‘native'
    console.log(b.jobs.first)// native

    方法三:JSON

    function copy(obj){
        return JSON.parse(JSON.stringify( obj ));
    }
    • 会忽略undefined,fn
    • 不能序列化函数
    • 不能解决循环引用的对象

    方法四:MessageChannel

    function structuralClone(){
        return new Promise(resolve =>{
            const {port1,port2} = new MessageChannel()
            port2.onmessage = ev => resolve(ev.data)
            port1.postMessage(obj)
        })
    }
    obj2  = await structuralClone(obj1);
    • 如果对象中有函数,会报错
    • 可以解决循环引用的对象
    • 异步 await
  • 相关阅读:
    开发一个App的成本是多少?
    自定义Drawable
    数据库服务软件类型和配置redis
    分库分表
    创建视图
    部署MYSQL高可用集群
    读写分离《二》
    读写分离和多实例
    部署mysql主从同步
    备份和恢复
  • 原文地址:https://www.cnblogs.com/wcss/p/12258478.html
Copyright © 2011-2022 走看看