gpt4 book ai didi

javascript - 序列化一个javascript类对象?

转载 作者:行者123 更新时间:2023-11-29 20:51:50 29 4
gpt4 key购买 nike

要求很简单。这是一个类...

class myobj {

constructor(var1, var2) {
this.var1 = var1;
this.var2 = var2;
}

addThemUp() {
return this.var1 + this.var2;
}

}

现在我做了其中一个......

var myInstance = new MyObj(3, 7);

可爱。但是现在我需要序列化它,以便我可以保存它并在以后加载它。像...

serialise(myInstance);
// Save to a file
// ... do some other stuff ...
// load from file
myInstance = unserialise(fileData);
// - or -
unserialise(fileData, myInstace);
// etc...

如何? 我不关心表示形式采用什么形式,因为它将由同一页面加载。如果仅保存值,将它们加载回对象的通用方法会很好,因为同一页面具有类"template"来查找函数的定义。

该对象很大且不断变化,因此从 JSON 手动复制值以保留函数实际上无法维护。但是,可以使用任何数量和类型的变量来实现这一点的解决方案将很有用。

我还必须坚持使用普通的单文件 javascript,尽管是在现代浏览器中。

TL;DR:如何序列化和反序列化一个对象而不丢失其功能?

最佳答案

您可以使用 JSON.stringify,但请注意它只序列化属性,而不是方法。因此,要反序列化一个对象,只需创建一个虚拟实例并使用 Object.assign 使用检索到的对象更新属性:

function serialize(instance) {
var str = JSON.stringify(instance);
// save str or whatever
}

function unserialize(str, theClass) {
var instance = new theClass(); // NOTE: if your constructor checks for unpassed arguments, then just pass dummy ones to prevent throwing an error
var serializedObject = JSON.parse(str);
Object.assign(instance, serializedObject);
return instance;
}

示例:

function serialize(obj) {
var str = JSON.stringify(obj);
return str;
}

function unserialize(str, theClass) {
var instance = new theClass();
var serializedObject = JSON.parse(str);
Object.assign(instance, serializedObject);
return instance;
}

// TEST CLASS

class TestClass {
constructor(a, b) {
this.a = a;
this.b = b;
}

sum() {
return this.a + this.b;
}
}

// USAGE

var instance = new TestClass(5, 7);

var str = serialize(instance);

var retrievedInstance = unserialize(str, TestClass);

console.log(retrievedInstance.sum());

关于javascript - 序列化一个javascript类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461461/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com