使用js实现复制

复制

1.遍历复制(for in)

特征:不修改引用关系(原来的属性还在),仅能复制字符属性,Symbol不能复制,不可枚举属性不能复制,原型链不能复制。浅复制

2.JOSN.parse(JSON.stringify(obj)) 转换复制

特征:修改引用关系(相当于创建一个新的对象,不再拥有原来的属性),仅能复制字符属性,Symbol不能复制,不可枚举属性不能复制,原型链不能复制,函数和其他类型不能复制。深复制

3.{…obj}解构赋值复制

特征:修改引用关系,Symbol和函数都能复制,不可枚举属性和原型链都不能复制。浅复制

4.Object.assign()对象复制

特征:不修改引用关系,可以复制属性、方法、Symbol类型,不可枚举属性和原型链都不能复制。浅复制

深复制**

1.使用defineProperty***

function cloneObject(source,target){
   
    if(source === null||source === undefined) return source;
    if(source===document) return;
    //判断target是不是继承对象的实例,是不是引用类型(null,undefined,Boolean,string,number都不是引用类型)
    if(!Object.prototype.isPrototypeOf(target)){
   
        //判断源对象是不是dom元素
        if(HTMLElement.prototype.isPrototypeOf(source)){
   
            //创建dom元素
             target = document.createElement(source.nodeName);
        }else if(source.constructor === RegExp){
   
            // 任何正则表达式都有source和flags,source是正则内容,flags是正则修饰符
            // 因为这两个属性都是只读属性,不能写入,必须通过构造函数创建时带入
            target = new RegExp(source.source,source.flags);
        }else if(source.constructor === Date){
   
            // 日期对象在创建的对象中将原有的日期对象放入,可以让当前日期对象变为原有日期对象的值,但是没有引用关系
            targer = new Date(source);
        }else if(source.constructor === Function)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值