现有一个类(typescript)如下:
export class User {
username: string;
password: string;
expired: boolean;
isExpired() {
return this.expired;
}
}
假如我们这样来使用一下:
const a = new User();
a.isExpired();
const b = JSON.parse(JSON.stringify(a)) as User;
b.isExpired();
你会发现浏览器会报错:
b.isExpired is not a function
这是由于JSON.parse的转换不会将function也进行转换,只是将JSON string转换成了JSON object而已。需要进行如下多一步骤才能设置该object的原型prototype:
// const b = JSON.parse(JSON.stringify(a)) as User;
const c = new User();
Object.assign(c, b);
c.isExpired();
本文探讨了在使用JSON.parse和JSON.stringify进行TypeScript类对象深拷贝时遇到的问题,即方法丢失,并提供了正确的解决方案:通过创建新实例并使用Object.assign方法来保留原型链。
1977

被折叠的 条评论
为什么被折叠?



