我有 javascript 对象树。让我们称之为“家庭”。它可以包含任意数量的某些对象(“父母”),每个对象可以包含任意数量的“子”对象。这个结构中的层数是已知的,树的每一层只包含一种特定的类型。
所有的对象都有数据和方法。
我想将结构化数据保存在数据库中。JSON.stringify() 可以完美地提取数据并保存结构。但是如何回到对象呢?JSON.parse() 失败,因为它重新创建了没有方法的对象。
在这种情况下我该怎么办?我应该编写自己的函数来从字符串重新创建对象吗?或者我应该以某种方式将数据与方法一起保存(似乎是一种浪费)。
正如我所知道的结构,如果有可能指向一个对象并告诉“这是一个父对象”并且它会得到方法,那将非常方便。那时我可以轻松地循环通过它。但我不知道该怎么做,而且我也担心我的构造函数可以将一些值设置为默认值。
对象构造函数看起来像这样:
function lines()
{
this.lines = [];
this.height = 0.5*theMargin;
this.addLine = addLine;
function addLine(newline)
{
this.lines.push(newline);
this.height += newline.height;
}
}
function aLine()
{
this.dots = [];
this.height = 0;
this.length = indent;
this.insertDot = insertDot;
function insertDot(pos,newDot)
{
this.dots.splice(pos,0,newDot);
this.length += newDot.length;
this.height = Math.max(this.height,newDot.height);
if (this.length > maxLineLength)
{ "I will not go into details here" }
}
}
然后我会喜欢:
var a = new lines();
var testline = new aLine();
var testdot = new aDot();
testdot.height = 10;
testdot.length = 15;
testline.insertDot(0,testdot);
a.addLine(testline);
a.addLine(testline);
然后我想保存有关长度和高度的数据。和结构,要知道哪个点属于哪条线。
我将该数据发送到网络服务器。我认为这些是理解所用方法的关键:
post = "name=" + name + "&tab=" + JSON.stringify(file);
req.open("POST", "saveFile.php", true);
req.send(post);
保存的文件正是我想要的——结构和数据。但我不知道如何让它再次成为一个对象。我不坚持使用 JSON.stringify() 方法。我会喜欢任何可以让我保存内容而无需重复保存方法的方法。