当前位置:首页|资讯

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

作者:_前端の神_发布时间:2024-10-14

复制普通对象大家都会,比如深克隆浅克隆,那么如何复制一个类的实例呢,复制后的实例类型要与源对象一致该怎么办?

下面这段代码中我们定义了一个基类Person,   Male和Female都继承与基类Person

基类中我们定义了一个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 在打印一下这个类:

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

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

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

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

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

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

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



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1