Javascript 访问对象实例构造函数以进行克隆
TLDR:在类方法中使用this.constructor(props)来复制该类是否存在任何缺陷 我有一个用例,为实体定义类模型对于整个复杂系统的管理和处理非常有用 这些实体模型类都需要一组通用方法 我不希望在多个实体模型类之间重复代码。我正在探索BaseEntityModel类的使用,它可以被所有其他需要公共功能的模型类扩展 这些方法之一是Javascript 访问对象实例构造函数以进行克隆,javascript,reactjs,Javascript,Reactjs,TLDR:在类方法中使用this.constructor(props)来复制该类是否存在任何缺陷 我有一个用例,为实体定义类模型对于整个复杂系统的管理和处理非常有用 这些实体模型类都需要一组通用方法 我不希望在多个实体模型类之间重复代码。我正在探索BaseEntityModel类的使用,它可以被所有其他需要公共功能的模型类扩展 这些方法之一是clone()方法,它提供对象的深度克隆作为ExtendedEntityModel类型 clone()将在BaseEntityModel类上声明。从扩展了B
clone()
方法,它提供对象的深度克隆作为ExtendedEntityModel类型
clone()
将在BaseEntityModel类上声明。从扩展了BaseEntityModel类的ExtendedEntityModel对象调用clone时,我希望保留类名和属性
我需要一种通过BaseEntityModel创建ExtendedEntityModel新实例的方法,而无需在调用clone()
时明确知道它是什么。换句话说,我希望避免使用newparentclassentity()
,因为BaseEntityModel方法需要适用于它的所有扩展
我做了一些搜索,但在这个模式上找不到太多。经过一些修改,我发现调用this.constructor(props)
正是我想要的。请参见下面的类和clone()
函数
BaseEntityModel.js
class BaseEntityModel {
constructor({ entityType, dataKeys }) {
this.entityType = entityType;
this.dataKeys = dataKeys;
}
/**
* Provide deep clone of self, Preserving extended class properties
*/
clone() {
return new this.constructor(JSON.parse(JSON.stringify(this))); //<-- here, this.constructor
};
}
然后使用
var extendedModel1 = new ExtendedModel({param1, param2};
var clonedExtendedModel = extendedModel1.clone(); //returns a cloned version and of type ExtendedModel
调用this.constructor
我找不到太多信息。有人能提供一些见解来解释为什么这可能是一个错误的选择,或者确认这不是一个等待引爆的javascript炸弹吗
请参阅工作实现的示例
返回this.constructor(JSON.parse(JSON.stringify(this))代码>有问题。使用new
keyword.updated调用构造函数,以返回新的this.constructor(JSON.parse(JSON.stringify(this))代码>返回this.constructor(JSON.parse(JSON.stringify(this))代码>有问题。使用new
keyword.updated调用构造函数,以返回新的this.constructor(JSON.parse(JSON.stringify(this))代码>
var extendedModel1 = new ExtendedModel({param1, param2};
var clonedExtendedModel = extendedModel1.clone(); //returns a cloned version and of type ExtendedModel