Javascript 访问对象实例构造函数以进行克隆

Javascript 访问对象实例构造函数以进行克隆,javascript,reactjs,Javascript,Reactjs,TLDR:在类方法中使用this.constructor(props)来复制该类是否存在任何缺陷 我有一个用例,为实体定义类模型对于整个复杂系统的管理和处理非常有用 这些实体模型类都需要一组通用方法 我不希望在多个实体模型类之间重复代码。我正在探索BaseEntityModel类的使用,它可以被所有其他需要公共功能的模型类扩展 这些方法之一是clone()方法,它提供对象的深度克隆作为ExtendedEntityModel类型 clone()将在BaseEntityModel类上声明。从扩展了B

TLDR:在类方法中使用this.constructor(props)来复制该类是否存在任何缺陷

我有一个用例,为实体定义类模型对于整个复杂系统的管理和处理非常有用

这些实体模型类都需要一组通用方法

我不希望在多个实体模型类之间重复代码。我正在探索BaseEntityModel类的使用,它可以被所有其他需要公共功能的模型类扩展

这些方法之一是
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