Javascript 从字符串重新实例化自定义类

Javascript 从字符串重新实例化自定义类,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,从持久化数据结构重新实例化类的最佳方法是什么 当前在存储IJSON.stringify()时,它会像这样重新实例化时解析该字符串 module.exports = class Player { constructor(str, isExistingInstance=false, rsn) { if(isExistingInstance) { try { parsedObject = JSON.parse(str) this.rsn = p

从持久化数据结构重新实例化类的最佳方法是什么

当前在存储I
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, ""); 
}

这个方法看起来很混乱或肮脏,我觉得必须有一种更干净的方法来处理重新实例化

构造函数应用于创建实例,将解析和构建移动到方法,并在实例化类后调用它:

职业玩家{
构造函数(){
this.rsn=null;
this.skills=null;
this.kc=null;
}
构建(str,rsn){
如果(rsn){
试一试{
const parsedObject=JSON.parse(str);
this.rsn=parsedObject.rsn;
this.skills=parsedObject.skills;
this.kc=parsedObject.kc;
}捕捉(错误){
console.log(
从现有实例实例化对象时出错。应为JSON.stringify'd版本的播放器,收到:“,
str
);
}
}否则{
抛出新错误(“预期的rsn字符串类型,收到:”,typeof rsn);
}
}
}
const str='{“rsn”:123,“skills”:“很多”,“kc”:“kc”}';
const playerOne=新玩家();
playerOne.build(str,123);

console.log(playerOne.skills)应使用构造函数创建实例,将解析和构建移动到方法,并在实例化类后调用它:

职业玩家{
构造函数(){
this.rsn=null;
this.skills=null;
this.kc=null;
}
构建(str,rsn){
如果(rsn){
试一试{
const parsedObject=JSON.parse(str);
this.rsn=parsedObject.rsn;
this.skills=parsedObject.skills;
this.kc=parsedObject.kc;
}捕捉(错误){
console.log(
从现有实例实例化对象时出错。应为JSON.stringify'd版本的播放器,收到:“,
str
);
}
}否则{
抛出新错误(“预期的rsn字符串类型,收到:”,typeof rsn);
}
}
}
const str='{“rsn”:123,“skills”:“很多”,“kc”:“kc”}';
const playerOne=新玩家();
playerOne.build(str,123);

console.log(playerOne.skills)
在类上有一个静态的
fromJSON
方法。然后可以执行
constplayer=player.fromJSON(str)
。该方法可以根据需要对属性设置进行所有解析。听起来确实更干净。然后用类似
const existingPlayer=new Player()的东西重新创建。fromJSON(str)
?@FelixKling我最喜欢你的建议。在我看来,使用静态方法是最干净的方法。如果你贴出答案,我会接受的!:)在类上有一个静态
fromJSON
方法。然后可以执行
constplayer=player.fromJSON(str)
。该方法可以根据需要对属性设置进行所有解析。听起来确实更干净。然后用类似
const existingPlayer=new Player()的东西重新创建。fromJSON(str)
?@FelixKling我最喜欢你的建议。在我看来,使用静态方法是最干净的方法。如果你贴出答案,我会接受的!:)