У мене є визначення об’єкта JavaScript, яке містить циклічне посилання: воно має властивість, що посилається на батьківський об’єкт.
Він також має функції, які я не хочу передавати на сервер. Як мені серіалізувати та десеріалізувати ці об’єкти?
Я читав, що найкращим методом для цього є використання stringify Дугласа Крокфорда. Однак у Chrome з’являється така помилка:
TypeError: Перетворення кругової структури в JSON
Код:
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function () {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = xid;
this.parent = xparent;
this.people = [];
that = this;
this.createPerson = function () {
this.people[this.people.length] = new person(this.people.length, this, "someName");
//other commands
}
this.saveGroup = function () {
alert(JSON.stringify(that.people));
}
}
Це тест, який я створив для цього питання. У цьому коді є помилки, але по суті у мене є об'єкти всередині об'єктів і посилання, передане кожному об'єкту, щоб показати, що таке батьківський об'єкт при створенні об'єкта. Кожен об'єкт також містить функції, які я не хочу розшифровувати. Я просто хочу такі властивості, як Person.Name
.
Як мені серіалізувати перед відправкою на сервер і десеріалізувати його, припускаючи, що той самий JSON передається назад?