js 从json字符串反序列化对象,如何恢复其对象方法的小技巧

当从JSON字符串反序列化JavaScript对象时,对象的方法会丢失。一种解决方案是利用原型(prototype)来恢复对象的方法。例如,有一个对象A,包含方法sum。序列化后再反序列化,调用方法会报错。通过将反序列化的对象的__proto__指向原始类A的构造函数,可以恢复对象的方法,使其能够正常执行。
摘要由CSDN通过智能技术生成

应用场景中,有将前端的一些数据保存到后台,在下一次使用的时候取出恢复的操作。对象的字段在这个过程中,是不会产生问题的,但是通过json序列化/反序列化后,对象的方法却不能恢复。

解决这问题最原始的方法,就是重新new个对象,然后把字段依次赋值,但这种耗时耗力无法自适应变更的方法未免也太low了点。

思来想去,记起了很久前看到的关于prototype的文章,便思考了如何能通过prototype完成这一操作。

 

假设有对象A

class A{
 constructor(i, j){
 	this.i = i
    this.j = j
 }
 sum() {
 	return this.i + this.j
 }
}

let a = new A(1, 2)
console.log(a.sum())

输出3是毫无疑问的,接下来,对a进行json的序列化

let aJsonStr = JSON.stringify(a)
console.log(aJsonStr, typeof(aJsonStr))

输出 {"i":1,"j":2} string

然后便是对a进行json的反序列化

let a2 = JSON.parse(aJsonStr)
console.log(a2, typeof(a2))

输出 {i: 1, j: 2} "object"

重点来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值