我看到了很多类似的问题,但我无法确定它们是否被清晰地回答了 - 也许我有点迟钝,抱歉。
我想要拥有自己对象的便捷性(和清晰度),称之为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(obj, fn); function fn(obj) { return obj.type === 'a' ? new A(obj) : a; }
如果我有时间,我会写一个正确的答案。抱歉。 - J. K.CardboardBox()
上使用函数(fn),那么从JSON.parse()
返回的是CarboardBox()
的构造函数。obj.type
始终未定义。我觉得我漏掉了什么...... - Steve.type
,而且你没有正确使用参数(第一个参数不是建议的obj
)。请参见http://jsfiddle.net/LSUJ9/. - pimvdb