我有一个类的示例
class MyObject{
id: number = 0;
data: string = "";
constructor(){
}
toString(){
return `${this.id}: ${this.data}`;
}
}
const myObj = new MyObject()
myObj.data = "hello"
如何将其转换为纯JS对象:
const output = {id: 10, data: "hello"}
我知道这是可行的,但一定有一种方法不序列化整个对象:
const output = JSON.parse(JSON.stringify(myObj))
最好的办法是什么?
请注意,我正在寻找一个通用的解决方案,而不是像这样:
toObject() {
return {
id: this.id,
data: this.data,
};
}
2条答案
按热度按时间pgpifvop1#
要创建一个只包含示例的属性而不包含示例的方法的对象,可以使用
Object.assign()
将对象的所有可枚举的own属性复制到另一个对象,该对象可以指定为一个新的普通对象。2lpgd9682#
对于简单的情况,您可以使用对象文字传播语法:
如果原始对象有嵌套的自定义对象(也需要转换为普通对象或数组),那么可以创建一个递归函数,或者使用
structuredClone
函数(在ECMAScript 2023中添加,节点17)。下面是一个更实际的链表实现示例:然而,请注意,这 * 确实 * 在幕后序列化/反序列化整个对象,并且在涉及本机类的情况下,它们也在目标对象中维护(如
Set
,Map
,Date
,RegExp
,Number
...)。这可能是你想要的,也可能不是,但是要知道,在这种情况下,JSON.stringify
也有 * 特定 * 的结果:对于Set
,Map
或RegExp
,您将得到一个空对象,对于Date
,您将得到一个字符串,...等等,因此这可能需要特别注意-取决于预期。