Восстановить пользовательский класс из строки - PullRequest
1 голос
/ 25 сентября 2019

Каков наилучший способ создания экземпляра класса из сохраняемой структуры данных?

в настоящее время при сохранении 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, ""); 
}

Этот метод кажется грязным или грязным, мне кажется,должен быть более чистый способ справиться с повторной реализацией.

1 Ответ

0 голосов
/ 25 сентября 2019

конструктор должен использоваться для создания экземпляра, перемещения анализа и построения в метод и вызова его после создания экземпляра класса:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...