美文网首页
如何复制一个对象的实例 Object.create

如何复制一个对象的实例 Object.create

作者: littlesunn | 来源:发表于2024-10-13 22:14 被阅读0次
class Person {

    name = '小明';
    age = 12;

    constructor() {
        console.log("我是Person类");
    }

    copy() {
        let shallowCopy = Object.assign(Object.create(null), this);   // 复制属性
        Object.setPrototypeOf(shallowCopy, Object.getPrototypeOf(this));
        return shallowCopy
    }
}

class Male extends Person {
    constructor() {
        super();
        console.log("我是Male类");
    }
}

class Female extends Person {
    constructor() {
        super();
        console.log("我是Female类");
    }
}

const male = new Male();
console.log(male, "male");

const male2 = male.copy();
console.log(male2, "male2"); 作者:_前端の神_ https://www.bilibili.com/read/cv39430850/ 出处:bilibili

基类中我们定义了一个copy方法.用于复制对象,并且如果是Male的实例复制,他就复制Male, Female的实例他就复制Female;

copy方法的第一行代码,我们使用Object.create(null) 创建了一个很纯净的对象(你可以自己打印下),没有属性,也没有原型;,我们把当前实例的属性合并到这个空对象里面去Object.assign;

copy方法的第二行代码,我们使用Object.getPrototypeOf(this) 获取当前实例的原型

(这个this是谁,谁调用的就是谁,比如是Male的实例调用他就是Male类;Person类调用他就是Person;)

再通过Object.setPrototypeOf将原型设置到shallowCopy上,那么这个shallowCopy就是我们复制的一个新的类了,类型与this当前实例一致;

啥是原型,我们先new 一下Male 在打印一下这个类:


image.png

Prototype就是Male类的原型,他指向Person;


image.png

点开这个Prototype 我们可以看到Male的构造器就是Male;

所以我们通过setPrototypeOf 将一个普通对象的原型设置的与某个实例的原型一致,那么这两个类就是相同类型了!

同时我们第一行代码 通过 Object.assign 把当前this的属性合过去了,所以属性也相当于复制过去了,实现整个类的copy,但是注意如果某些属性是对象,那么他是引用类型,改变这个对象的属性会影响到原来的类,所以copy方法的第一行中我还会使用深克隆去复制属性:

Object.assign(Object.create(null), deepClone(this));

deepClone你可以去网上找封装的方法;

最后如果你这个属性不是简单的对象,比如是另一个类,或者dom元素,那你可能需要进一步处理

作者:前端の神 https://www.bilibili.com/read/cv39430850/ 出处:bilibili

相关文章

  • js常见原生方法重写汇总(一)

    Object.create 原理:创建对象,并且现有的对象来提供新创建的对象的proto。 new 原理:创建实例...

  • create constructor

    Object.create()方法创建新的对象实例 新对象的原型就是调用create方法时传入的第一个参数 Obj...

  • 操作对象的方法很实用

    Object.create() 以参数为原型,创建一个新对象实例。 Object.assign() 以将所有可枚举...

  • prototype

    原型链 创建对象有几种方法 对象字面量 通过构造函数 Object.create 原型、构造函数、实例、原型链 函...

  • OC对象复制:1-深复制与浅复制

    一般来说,复制一个对象包括创建一个新的实例,并用原始对象中的值来初始化这个新的实例。复制非指针型的对象比较简单,例...

  • Object上的方法

    Object.create()创建对象方法 Object.create(proto, [propertiesObj...

  • 生成对象的方式

    方式一:构造函数new方式二:当没有构造函数时,有实例对象时作为模板Object.create() new命令的原...

  • 原型

    设置对象的原型Object.create(proto[,propertiesObject]) proto 一个对象...

  • 原型模式与深浅拷贝

    使用原型实例指定将要创建的对象类型,通过复制这个实例创建(新的对象) clone是字节码复制(所以性能比较好) 注...

  • 面向对象03-常用方法

    Object.create()方法 作用:创建对象并设置原型对象语法:var o=Object.create(ob...

网友评论

      本文标题:如何复制一个对象的实例 Object.create

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