gpt4 book ai didi

javascript - 保存 Javascript 对象

转载 作者:行者123 更新时间:2023-12-02 18:50:24 34 4
gpt4 key购买 nike

我有 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() 方法。我会喜欢任何可以让我保存内容而无需重复保存方法的方法。

最佳答案

如果您确实出于某种原因对保存整个对象的想法着迷,那么我建议您使用 toString() 方法,该方法在调用时实际上会以字符串的形式返回函数的代码体。功能。

var obj = { func: function() { alert('hello!'); };
for(var key in obj)
if (typeof obj[key] === 'function')
alert(obj[key].toString());

除了 json 数据之外,您只需添加代码来序列化和存储此信息。

总而言之,您确实应该简单地存储对象的状态并将它们重新加载到您的应用程序中。

编辑:重建对象客户端

免责声明:我不是 PHP 专家,因此您只能找到一个实际的编码示例,但我相信有一个具有万能的 Google 力量的示例。

您只需使用序列化/反序列化类将数据序列化回对象即可。因此,假设伪代码部分是相关特定页面的 php 文件:

<?php
<html>
<head>
<script type="text/javascript">
var model = /* Use serializing class on your server-side object */;
//Now you just need to build a function into your objects that is much like a constructor that can receive this model and rebuild the object

function rebuildObject(yourObject, jsonModel) {
//assign first property
//assign second etc...
}
</script>
</head>
<body>
</body>
</html>
?>

您实际上是在脚本标记中将 json 数据模板化回页面,以便您可以在客户端访问它。 JavaScript 解释器会自动将 json 转换为您的代码可以使用的实际 js 对象,因此不会出现问题。

关于javascript - 保存 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904052/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com