将人工对象设置为特定的类



我正在编写一个处理类实例化(unmarshaller)的代码。

首先,创建一个对象。我使用let obj = new BaseModel
在处理输入数据的过程中,我最终确定了未编组对象的类。
我有这个类,用<T extends BaseModel> clazz : { new (): T }表示。

现在我想改变之前创建的对象的类,以一种不会与TypeScripts类处理代码冲突的方式。

这条路对吗?

Object.getPrototypeOf(result).constructor = clazz;
编辑:这不是它。当属性值保持不变时,浏览器控制台仍然显示new使用的类型。 或者在TypeScript中有一个结构可以以更兼容未来的方式来做这件事?
或者在TypeScript中有一个结构可以以更兼容未来的方式来做这件事?

这是正确的。在TypeScript中使用constructor来确定创建函数,就像在JavaScript中一样。

如果我正确理解您的问题,您希望在运行时将对象的类型从您使用new创建的类型更改为另一种可能派生的类型。

我认为你最好先实例化一个你想要的类的实例,然后把另一个对象的成员复制到它里面。

如果不想运行构造函数,可以使用jQuery执行以下操作:

let newTypeObj:NewType = $.extend(true, Object.create(NewType.prototype), oldTypeObj);

如果你想在合并前运行新类型的构造函数,你可以这样做:

let newTypeObj:NewType = new NewType();
$.extend(true, newTypeObj, oldTypeObj);

如果你没有或不想使用jQuery,那么你可以在你的新类型中编写一个函数,该函数接受旧类型的一个实例并复制其成员,或者使用普通JavaScript编写一个泛型扩展。

这个问题有一些关于替代方案,但普遍的共识似乎是,你不能改变一个对象的类:在JavaScript中改变一个对象's类型

相关内容

  • 没有找到相关文章

最新更新