从持久数据结构重新实例化类的最佳方法是什么?
当前在存储时,我JSON.stringify()
然后在重新实例化时解析该字符串,如下所示
module.exports = class Player {
constructor(str, isExistingInstance=false, rsn) {
if(isExistingInstance) {
try {
parsedObject = JSON.parse(str)
this.rsn = parsedObject.rsn
this.skills = parsedObject.skills
this.kc = parsedObject.kc
} catch (err) {
console.log("Error instantiating object from exisiting instance. Expected JSON.stringify'd version of Player, Received: ", str)
}
} else {
if(!rsn) throw new Error("Expected type of string for rsn, received: ", typeof(rsn));
}
}
我不喜欢这种方法,因为即使它不是现有实例,您也必须提供 str
。有人对如何改进有任何建议吗?
我目前的想法是与此类似的“构建器”功能:
function buildNewPlayer(rsn) {
new Player(null, false, rsn);
}
function buildExistingPlayer(str, rsn) {
new Player(str, true, "");
}
这个方法看起来很困惑或肮脏,我觉得必须有一个更干净的方法来处理重新实例化。
最佳答案
构造函数应该用于创建实例,将解析和构建移至方法并在实例化类后调用它:
class Player {
constructor() {
this.rsn = null;
this.skills = null;
this.kc = null;
}
build(str, rsn) {
if (rsn) {
try {
const parsedObject = JSON.parse(str);
this.rsn = parsedObject.rsn;
this.skills = parsedObject.skills;
this.kc = parsedObject.kc;
} catch (err) {
console.log(
"Error instantiating object from exisiting instance. Expected JSON.stringify'd version of Player, Received: ",
str
);
}
} else {
throw new Error("Expected type of string for rsn, received: ", typeof rsn);
}
}
}
const str = '{"rsn": 123, "skills" : "a lot", "kc": "kc"}';
const playerOne = new Player();
playerOne.build(str, 123);
console.log(playerOne.skills);
关于javascript - 从字符串重新实例化自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58100573/