Сохранение Class-объектов в javascript (Циклические ссылки) -> JSON .stringify-error - PullRequest
0 голосов
/ 02 августа 2020

Мне интересно, есть ли другие способы сохранить класс в javascript. Я уже пытался сериализовать с помощью JSON .stringify (), но это возвращает ошибку, так как некоторые классы ссылаются друг на друга (Person и Table).

Я знаю, что можно написать пользовательское сохранение методы для каждого типа класса и написать собственный инициализатор для каждого класса, используя идентификаторы вместо указателей. Но мне интересно, как будет выглядеть будущий сценарий ios, могу ли я настроить JSON .stringify, или если у класса есть настраиваемая функция печати, или вы можете написать ее, как вы, в python.

Пользовательские методы печати и сохранения для классов?

Возможно сохранение и экземпляр класса в куче ie?

Классы: Project

class Project{
constructor(room, name, id, guests, allowedModerators,creationDate, creationUser, plannedDate){
    this.room = room || undefined;
    this.name = name || "Ditt Prosjekt";
    this.id = id || generateID();
    this.guests = guests || [];
    this.allowedModerators = allowedModerators || [];
    this.creationDate = new Date(creationDate) || new Date().getTime();
    this.creationUser = creationUser || undefined; // Pointer ID
    this.plannedDate = new Date(plannedDate) || undefined;
    this.setCreationDate();
}
//Methods...
}

Person

class Person{
constructor(firstName, surName, age, gender, email, allergies, id, table, seat){
    if(arguments.length == 1 && typeOf(arguments[0]) == "object"){
        //check if they are object for import
    }else{
        this.firstName = firstName || undefined;
        this.surName = surName || undefined;;
        this.age = age || undefined;;
        this.gender = gender || undefined;;
        this.email = email ||undefined;
        this.allergies = allergies || [];
        this.id = id || generateID();
        this.table = table || undefined; //pointer
        this.seat = seat || undefined;
    }
}
//Methods...
}

Таблица

class Bord{
constructor(positionX, positionY, bordType, rotation, descriptor){
    this.id = idCounter;
    idCounter++;
    this.persons = [];
    this.seats = [];
   
    
    this.seats = new SeatController(this);
}
}

SeatController

class SeatController{
constructor(parentTable){
    this.table = parentTable;
    let tempValue = parentTable.returnCenter();
    this.numberOfSeats = parentTable.returnNumberOfSeats();
    this.seats = [];
    
 }   
}

[Простая структура классов] [1]

[1]: https://i.stack.imgur.com/n4FHw.png** сильный текст **

...