我已经看到了非常类似的问题,但我不能确定他们是否清楚地回答 - 也许我有点紧张,对不起。自定义对象到JSON然后返回到自定义对象?
我想让自己的对象具有方便性(清晰度),称之为CardboardBox()
。它不会包含代码,只包含数据。我想将它写入数据库并稍后再读取,但很明显,它在读回时是Object()
。所有我能想到的,找出它曾经是是:
- 有一个成员变量
type
我设置为CARDBOARD_BOX - 实例化一个新
CarbardBox()
和使用的功能(在框中)复制Object()
的属性到新的CardboardBox()
对象
有没有更好的方法来做到这一点?我很确定我可以更改实际的类型。
function CardboardBox() {
this.type = "CARDBOARD_BOX"
this.name = "No set";
this.populate = new function(obj) {
// populate this object with obj properties
}
var box = new CarboardBox(); // CarboardBox
box.name = "My Box";
send = JSON.stringyfy(box);
.
.
.
obj = JSON.parse(send); // Object
if (obj.type == "CARDBOARD_BOX") {
savedBox = new CardboardBox();
savedBox.populate(obj);
}
在此先感谢... 史蒂夫
[编辑]我的测试代码。
function CardboardBox(n) {
this.name = n;
}
var box = new CardboardBox("My Box");
send = JSON.stringify(box); // JSON CarboardBox()
obj = JSON.parse(send, function fn(obj) { // Object() returned
log("OB: "+obj.type);
return obj.type === 'CardboardBox' ? new CardboardBox(obj) : CardboardBox;
});
console.log(obj);
输出是:
OB: undefined utils.js:40
OB: undefined utils.js:40
function CardboardBox(n) {
this.name = n;
}
看看JSON.parse和JSON.stringify参数。您可以为每个对象定制回调。 'JSON.parse(obj,fn);函数fn(obj){return obj.type ==='a'?新的A(obj):a;如果我有时间的话,我会写一个正确的答案。抱歉。 –
感谢您的回复。非常感谢,但我现在更加困惑。如果我在'CardboardBox()'中使用函数(fn),那么从'JSON.parse()'返回的是'CarboardBox()'的构造函数。 'obj.type'总是未定义的。我想我错过了一些东西...... – Steve
@Steve:你必须设置'.type',并且你没有正确地使用参数(第一个参数不是'obj',因为建议)。请参阅http://jsfiddle.net/LSUJ9/。 – pimvdb